Remote and RPC.
[wrappi.git] / lib / connect.c
index 2062e08..e75ba53 100644 (file)
 void
 wrap_connect (wrap_h *w)
 {
-  /* Remote not implemented yet. */
-  assert (w->scheme == NULL);
+  switch (w->scheme) {
+  case WRAP_SCHEME_LOCAL:
+    /* nothing needed */
+    return;
+
+  case WRAP_SCHEME_SSH:
+    wrap_int_connect_ssh (w);
+    return;
+
+  default:
+    set_error ("invalid scheme");
+    return;
+  }
 }
 
 void
 wrap_set_scheme (wrap_h *w, wrap_scheme_enum scheme)
 {
-  /* XXX */
+  if (scheme < 0 || scheme >= wrap_scheme_enum_nr(w)) {
+    set_error ("scheme out of range");
+    return;
+  }
+  w->scheme = scheme;
 }
 
 void
 wrap_set_hostname (wrap_h *w, const char *hostname)
 {
-  /* XXX */
+  if (hostname == NULL || strlen (hostname) == 0) {
+    set_error ("invalid hostname");
+    return;
+  }
+  w->hostname = strdup (hostname);
+  if (!w->hostname)
+    set_error_errno ("strdup");
+}
+
+void
+wrap_int_make_request (wrap_h *w, int proc_nr, const void *args, void *ret)
+{
+  switch (w->scheme) {
+  case WRAP_SCHEME_LOCAL:
+    abort (); /* shouldn't be reachable */
+
+    /* XDR-based methods. */
+  case WRAP_SCHEME_SSH:
+    wrap_int_make_request_xdr (w, proc_nr, args, ret);
+    break;
+
+  default:
+    set_error ("invalid scheme");
+  }
 }