6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
7 * For copying and distribution information, please see the file
10 * This routine is part of the client library. It handles
11 * creating a connection to the sms server.
15 static char *rcsid_sms_connect_c = "$Header$";
18 #include <mit-copyright.h>
19 #include "sms_private.h"
22 static char *sms_server_host = 0;
25 * Open a connection to the sms server.
28 int sms_connect(server)
34 if (!sms_inited) sms_init();
35 if (_sms_conn) return SMS_ALREADY_CONNECTED;
38 * XXX should do a hesiod call to find the sms machine name & service
42 if (!server || (strlen(server) == 0))
43 server = SMS_GDB_SERV;
44 _sms_conn = start_server_connection(server, "");
45 if (_sms_conn == NULL)
47 if (connection_status(_sms_conn) == CON_STOPPED) {
48 register status = connection_errno(_sms_conn);
49 if (!status) status = SMS_CANT_CONNECT;
55 * stash hostname for later use
58 sms_server_host = strsave(server);
59 if (p = index(sms_server_host, ':'))
61 sms_server_host = canonicalize_hostname(sms_server_host);
68 _sms_conn = sever_connection(_sms_conn);
69 free(sms_server_host);
74 int sms_host(host, size)
80 /* If we are connected, sms_server_host points to a valid string. */
81 strncpy(host, sms_server_host, size);
89 struct sms_params *params = NULL;
90 struct sms_params *reply = NULL;
94 params->sms_version_no = sending_version_no;
95 params->sms_procno = SMS_NOOP;
97 params->sms_argl = NULL;
98 params->sms_argv = NULL;
100 if ((status = sms_do_call(params, &reply)) == 0)
101 status = reply->sms_status;
103 sms_destroy_reply(reply);