author | hallski <hallski> |
Mon, 13 Oct 2003 10:31:18 +0000 | |
changeset 48 | d913b0d5c7b6 |
child 84 | 7ae7b690aa89 |
permissions | -rw-r--r-- |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
1 |
namespace Loudmouth { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
2 |
using System; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
3 |
using System.Runtime.InteropServices; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
4 |
using System.Collections; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
5 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
6 |
public class Connection : Object { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
7 |
private Hashtable _asyncHandlers; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
8 |
private ResultFunction result_func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
9 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
10 |
public string Server { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
11 |
get { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
12 |
return lm_connection_get_server(this._obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
13 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
14 |
set { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
15 |
lm_connection_set_server(this._obj, value); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
16 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
17 |
} |
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 uint Port { |
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_port(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_port(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 bool UseSSL { |
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_use_ssl(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_use_ssl(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 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
37 |
public bool IsAuthenticated { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
38 |
get { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
39 |
return lm_connection_is_authenticated(this._obj); |
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 |
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
|
44 |
private delegate void _ResultFunction (IntPtr con, bool success, IntPtr ptr); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
45 |
private delegate void _DisconnectFunction (IntPtr con, int reason, IntPtr ignored); |
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 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
48 |
private static extern int lm_message_get_type (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
49 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
50 |
private int HandleElement (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
51 |
switch (lm_message_get_type(elementObj)) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
52 |
case (int)Element.ElementType.MESSAGE: |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
53 |
IncomingMessage(new Message(elementObj)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
54 |
break; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
55 |
case (int)Element.ElementType.PRESENCE: |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
56 |
IncomingPresence(new Presence(elementObj)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
57 |
break; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
58 |
case (int)Element.ElementType.IQ: |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
59 |
IncomingIQ(new IQ(elementObj)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
60 |
break; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
61 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
62 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
63 |
return 0; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
64 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
65 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
66 |
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
|
67 |
ElementHandler handler = (ElementHandler) _asyncHandlers[id]; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
68 |
if (handler != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
69 |
handler(Element.CreateElement(elementObj)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
70 |
} |
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 |
return 0; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
73 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
74 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
75 |
private void _HandleResult (IntPtr con, bool success, IntPtr ptr) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
76 |
ResultFunction func = this.result_func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
77 |
this.result_func = null; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
78 |
func(success); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
79 |
} |
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 |
public delegate void ElementHandler (Element element); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
82 |
public delegate void MessageHandler (Message message); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
83 |
public delegate void PresenceHandler (Presence presence); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
84 |
public delegate void IQHandler (IQ iq); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
85 |
public delegate void ResultFunction (bool success); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
86 |
public delegate void DisconnectionFunction (int reason); |
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 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
93 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
94 |
private static extern IntPtr lm_connection_new (string name); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
95 |
[DllImport ("libloudmouth.so")] |
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); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
97 |
[DllImport ("libloudmouth.so")] |
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); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
99 |
[DllImport ("libloudmouth.so")] |
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); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
101 |
[DllImport ("libloudmouth.so")] |
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); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
103 |
[DllImport ("libloudmouth.so")] |
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); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
105 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
106 |
private static extern bool lm_connection_is_authenticated (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
107 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
108 |
private static extern void lm_connection_set_server (IntPtr obj, string server); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
109 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
110 |
private static extern string lm_connection_get_server (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
111 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
112 |
private static extern void lm_connection_set_port (IntPtr obj, uint port); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
113 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
114 |
private static extern uint lm_connection_get_port (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
115 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
116 |
private static extern void lm_connection_set_use_ssl (IntPtr obj, bool use_ssl); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
117 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
118 |
private static extern bool lm_connection_get_use_ssl (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
119 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
120 |
private static extern bool lm_connection_send (IntPtr obj, IntPtr message, IntPtr errPtr); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
121 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
122 |
private static extern bool lm_connection_send_with_reply (IntPtr obj, IntPtr message, IntPtr handler, IntPtr errPtr); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
123 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
124 |
private static extern IntPtr lm_connection_send_with_reply_and_block (IntPtr obj, IntPtr message, IntPtr errPtr); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
125 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
126 |
private static extern void lm_connection_register_message_handler (IntPtr obj, IntPtr handler, int type, int priority); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
127 |
[DllImport ("libloudmouth.so")] |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
128 |
private static extern IntPtr lm_message_handler_new (_ElementHandler handler, IntPtr u, IntPtr n); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
129 |
public Connection (string server) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
130 |
this._obj = lm_connection_new(server); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
131 |
this._asyncHandlers = new Hashtable(); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
132 |
IntPtr h = lm_message_handler_new(new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
133 |
lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.MESSAGE, 1); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
134 |
h = lm_message_handler_new(new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
135 |
lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.PRESENCE, 1); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
136 |
h = lm_message_handler_new(new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
137 |
lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.IQ, 1); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
138 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
139 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
140 |
public void Open (ResultFunction func) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
141 |
if (this.result_func != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
142 |
// Throw exception? |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
143 |
Console.WriteLine("Connection::Open: this.result_func != null"); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
144 |
return; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
145 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
146 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
147 |
this.result_func = func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
148 |
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
|
149 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
150 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
151 |
public bool OpenAndBlock () { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
152 |
return lm_connection_open_and_block(this._obj, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
153 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
154 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
155 |
public void Close () { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
156 |
lm_connection_close (this._obj, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
157 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
158 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
159 |
public void Authenticate (Account account, ResultFunction func) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
160 |
if (this.result_func != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
161 |
// Throw exception? |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
162 |
Console.WriteLine("Connection::Authenticate: this.result_func != null"); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
163 |
return; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
164 |
} |
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 |
this.result_func = func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
167 |
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
|
168 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
169 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
170 |
public bool AuthenticateAndBlock (Account account) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
171 |
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
|
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 |
public void Send (Element element) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
175 |
lm_connection_send (this._obj, element.GetObject (), 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 void SendWithReply (Element element, ElementHandler handler) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
179 |
IntPtr ptr = new IntPtr(); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
180 |
IntPtr chandler; |
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 |
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
|
183 |
_asyncHandlers.Add(ptr, handler); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
184 |
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
|
185 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
186 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
187 |
public Element SendWithReplyAndBlock (Element element) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
188 |
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
|
189 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
190 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
191 |
public void SendRaw (string raw) { |
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 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
194 |
} |