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");
+ }
}