mono/Connection.cs
changeset 84 7ae7b690aa89
parent 48 d913b0d5c7b6
--- a/mono/Connection.cs	Thu Mar 18 00:06:01 2004 +0000
+++ b/mono/Connection.cs	Mon Aug 02 23:57:41 2004 +0000
@@ -1,9 +1,18 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Collections;
+
 namespace Loudmouth {
-    using System;
-    using System.Runtime.InteropServices;
-    using System.Collections;
+    public delegate void ElementHandler        (Element element);
+    public delegate void MessageHandler        (Message message);
+    public delegate void PresenceHandler       (Presence presence);
+    public delegate void IQHandler             (IQ iq);
+    public delegate void ResultFunction        (bool success);
+    public delegate void DisconnectionFunction ();
 
-    public class Connection : Object {
+     public class Connection {
+	private IntPtr _obj;
+	
 	private Hashtable _asyncHandlers;
 	private ResultFunction result_func;
 	
@@ -25,12 +34,9 @@
 	    }
 	}
 
-	public bool UseSSL {
+	public bool IsOpen {
 	    get {
-		return lm_connection_get_use_ssl(this._obj);
-	    }
-	    set {
-		lm_connection_set_use_ssl(this._obj, value);
+		return lm_connection_is_open (this._obj);
 	    }
 	}
 	
@@ -39,24 +45,25 @@
 		return lm_connection_is_authenticated(this._obj);
 	    }
 	}
-
+	
 	private delegate int  _ElementHandler (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored);
 	private delegate void _ResultFunction (IntPtr con, bool success, IntPtr ptr);
 	private delegate void _DisconnectFunction (IntPtr con, int reason, IntPtr ignored);
 	
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern int lm_message_get_type (IntPtr obj);
 
-	private int HandleElement (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored) {
-	    switch (lm_message_get_type(elementObj)) {
-		case (int)Element.ElementType.MESSAGE:
-		    IncomingMessage(new Message(elementObj));
+	private int HandleElement (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored) 
+	{
+	    switch (lm_message_get_type (elementObj)) {
+		case (int) Element.ElementType.MESSAGE:
+		    EmitIncomingMessage (new Message (elementObj));
 		    break;
-		case (int)Element.ElementType.PRESENCE:
-		    IncomingPresence(new Presence(elementObj));
+		case (int) Element.ElementType.PRESENCE:
+		    EmitIncomingPresence (new Presence (elementObj));
 		    break;
-		case (int)Element.ElementType.IQ:
-		    IncomingIQ(new IQ(elementObj));
+		case (int) Element.ElementType.IQ:
+		    EmitIncomingIQ (new IQ (elementObj));
 		    break;
 	    }
 
@@ -78,63 +85,83 @@
 	    func(success);
 	}
 
-	public delegate void ElementHandler        (Element element);
-	public delegate void MessageHandler        (Message message);
-	public delegate void PresenceHandler       (Presence presence);
-	public delegate void IQHandler             (IQ iq);
-	public delegate void ResultFunction        (bool success);
-	public delegate void DisconnectionFunction (int reason);
-
 	public event MessageHandler        IncomingMessage;
 	public event PresenceHandler       IncomingPresence;
 	public event IQHandler             IncomingIQ;
 	public event DisconnectionFunction Disconnected;
 
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern IntPtr lm_connection_new (string name);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_open (IntPtr obj, _ResultFunction func, IntPtr ptr, IntPtr ignored2, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_open_and_block (IntPtr obj, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_close (IntPtr obj, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_authenticate (IntPtr obj, string username, string password, string resource, _ResultFunction func, IntPtr ignored, IntPtr ignored2, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_authenticate_and_block (IntPtr obj, string username, string password, string resource, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
+		private static extern bool lm_connection_is_open (IntPtr obj);
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_is_authenticated (IntPtr obj);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern void lm_connection_set_server (IntPtr obj, string server);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern string lm_connection_get_server (IntPtr obj);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern void lm_connection_set_port (IntPtr obj, uint port);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern uint lm_connection_get_port (IntPtr obj);
-	[DllImport ("libloudmouth.so")]
-	    private static extern void lm_connection_set_use_ssl (IntPtr obj, bool use_ssl);
-	[DllImport ("libloudmouth.so")]
-	    private static extern bool lm_connection_get_use_ssl (IntPtr obj);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern void lm_connection_set_ssl (IntPtr obj, IntPtr ssl);
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern IntPtr lm_connection_get_ssl (IntPtr obj);
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern void lm_connection_set_proxy (IntPtr obj, IntPtr proxy);
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern IntPtr lm_connection_get_proxy (IntPtr obj);
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_send (IntPtr obj, IntPtr message, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern bool lm_connection_send_with_reply (IntPtr obj, IntPtr message, IntPtr handler, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern IntPtr lm_connection_send_with_reply_and_block (IntPtr obj, IntPtr message, IntPtr errPtr);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern void lm_connection_register_message_handler (IntPtr obj, IntPtr handler, int type, int priority);
-	[DllImport ("libloudmouth.so")]
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern void lm_connection_set_disconnect_function (IntPtr obj, _DisconnectFunction func, IntPtr u, IntPtr n);
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern bool lm_connection_send_raw (IntPtr obj, string msg, IntPtr errPtr);
+	[DllImport ("libloudmouth-1.so")]
+	    private static extern void lm_connection_unref (IntPtr obj);
+	[DllImport ("libloudmouth-1.so")]
 	    private static extern IntPtr lm_message_handler_new (_ElementHandler handler, IntPtr u, IntPtr n);
-	public Connection (string server) {
-	    this._obj = lm_connection_new(server);
-	    this._asyncHandlers = new Hashtable();
-	    IntPtr h = lm_message_handler_new(new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero);
-	    lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.MESSAGE, 1);
-	    h = lm_message_handler_new(new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero);
-	    lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.PRESENCE, 1);
-	    h = lm_message_handler_new(new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero);
-	    lm_connection_register_message_handler(this._obj, h, (int)Element.ElementType.IQ, 1);
+
+	private void SetupConnection (string server, uint port)
+	{
+	    this._obj = lm_connection_new (server);
+	    this.Port = port;
+
+	    this._asyncHandlers = new Hashtable ();
+
+	    IntPtr h = lm_message_handler_new (new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero);
+	    lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.MESSAGE, 1);
+	    h = lm_message_handler_new (new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero);
+	    lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.PRESENCE, 1);
+	    h = lm_message_handler_new (new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero);
+	    lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.IQ, 1);
+	} 
+	
+	public Connection (string server) 
+	{
+	    SetupConnection (server, 5222);
+	}
+
+	public Connection (string server, uint port)
+	{
+	    SetupConnection (server, port);
 	}
 
 	public void Open (ResultFunction func) {
@@ -189,6 +216,35 @@
 	}
 	
 	public void SendRaw (string raw) {
+	    lm_connection_send_raw (this._obj, raw, IntPtr.Zero);
+	}
+
+	private void EmitIncomingMessage (Message m)
+	{
+	    if (IncomingMessage != null) {
+		IncomingMessage (m);
+	    }
+	}
+	
+	private void EmitIncomingPresence (Presence p)
+	{
+	    if (IncomingPresence != null) {
+		IncomingPresence (p);
+	    } 
+	}
+
+	private void EmitIncomingIQ (IQ iq)
+	{
+	    if (IncomingIQ != null) {
+		IncomingIQ (iq);
+	    }
+	}
+
+	private void EmitDisconnected ()
+	{
+	    if (Disconnected != null) {
+		Disconnected ();
+	    }
 	}
     }
 }