bindings/ruby/rlm-connection.c
changeset 353 999be9e7fad7
parent 352 5e3371477a70
child 354 aed430fbb43f
--- a/bindings/ruby/rlm-connection.c	Tue Apr 08 21:45:10 2008 +0200
+++ b/bindings/ruby/rlm-connection.c	Tue Apr 08 21:57:19 2008 +0200
@@ -49,12 +49,11 @@
 conn_open (int argc, VALUE *argv, VALUE self)
 {
 	LmConnection *conn;
-	VALUE         ret_val;
 	VALUE         func;
 
 	Data_Get_Struct (self, LmConnection, conn);
 
-	rb_scan_args (argc, argv, "&", &func);
+	rb_scan_args (argc, argv, "0&", &func);
 	if (NIL_P (func)) {
 		func = rb_block_proc ();
 	}
@@ -63,6 +62,45 @@
 					       (gpointer) func, NULL, NULL));
 }
 
+VALUE
+conn_close (VALUE self)
+{
+	LmConnection *conn;
+
+	Data_Get_Struct (self, LmConnection, conn);
+
+	return GBOOL2RVAL (lm_connection_close (conn, NULL));
+}
+
+static void
+auth_callback (LmConnection *conn, gboolean success, gpointer user_data)
+{
+	rb_funcall((VALUE)user_data, rb_intern ("call"), 1,
+		   GBOOL2RVAL (success));
+}
+
+VALUE
+conn_auth (int argc, VALUE *argv, VALUE self)
+{
+	LmConnection *conn;
+	VALUE         name, password, resource, func; 
+
+	Data_Get_Struct (self, LmConnection, conn);
+
+	rb_scan_args (argc, argv, "21&", &name, &password, &resource, &func);
+	if (NIL_P (func)) {
+		func = rb_block_proc ();
+	}
+
+	return GBOOL2RVAL (lm_connection_authenticate (conn, 
+						       StringValuePtr (name),
+						       StringValuePtr (password), 
+						       StringValuePtr (resource),
+						       auth_callback,
+						       (gpointer) func, NULL,
+						       NULL));
+}
+
 void
 Init_lm_connection (VALUE lm_mLM)
 {
@@ -74,5 +112,7 @@
 	rb_define_alloc_func (lm_mConnection, conn_allocate);
 
 	rb_define_method (lm_mConnection, "initialize", conn_initialize, 1);
-	rb_define_method (lm_mConnection, "open", conn_open, 1);
+	rb_define_method (lm_mConnection, "open", conn_open, -1);
+	rb_define_method (lm_mConnection, "close", conn_close, 0);
+	rb_define_method (lm_mConnection, "authenticate", conn_auth, -1);
 }