]> andersk Git - moira.git/blame - lib/mr_connect.c
don't build the profiled stuff
[moira.git] / lib / mr_connect.c
CommitLineData
e2a67c78 1/*
2 * $Source$
3 * $Author$
4 * $Header$
5 *
8defc06b 6 * Copyright (C) 1987, 1990 by the Massachusetts Institute of Technology
babbc197 7 * For copying and distribution information, please see the file
8 * <mit-copyright.h>.
e2a67c78 9 *
10 * This routine is part of the client library. It handles
8defc06b 11 * creating a connection to the mr server.
e2a67c78 12 */
13
14#ifndef lint
15static char *rcsid_sms_connect_c = "$Header$";
16#endif lint
17
babbc197 18#include <mit-copyright.h>
8defc06b 19#include "mr_private.h"
20#include <moira_site.h>
05fb8281 21#include <strings.h>
22
8defc06b 23static char *mr_server_host = 0;
e2a67c78 24
25/*
8defc06b 26 * Open a connection to the mr server. Looks for the server name
5450e3a1 27 * 1) passed as an argument, 2) in environment variable, 3) by hesiod
28 * 4) compiled in default (from sms_app.h).
e2a67c78 29 */
30
8defc06b 31int mr_connect(server)
bba84689 32char *server;
e2a67c78 33{
83e80378 34 extern int errno;
5450e3a1 35 char *p, **pp, sbuf[256];
36 extern char *getenv(), **hes_resolve();
6c00b7c4 37
8defc06b 38 if (!mr_inited) mr_init();
39 if (_mr_conn) return MR_ALREADY_CONNECTED;
83e80378 40
5450e3a1 41 if (!server || (strlen(server) == 0)) {
42 server = getenv("MOIRASERVER");
43 }
44
45#ifdef HESIOD
46 if (!server || (strlen(server) == 0)) {
47 pp = hes_resolve("moira", "sloc");
48 if (pp) server = *pp;
49 }
50#endif HESIOD
51
52 if (!server || (strlen(server) == 0)) {
8defc06b 53 server = MOIRA_SERVER;
5450e3a1 54 }
55
56 if (!index(server, ':')) {
8defc06b 57 p = index(MOIRA_SERVER, ':');
5450e3a1 58 p++;
59 sprintf(sbuf, "%s:%s", server, p);
60 server = sbuf;
61 }
62
83e80378 63 errno = 0;
8defc06b 64 _mr_conn = start_server_connection(server, "");
65 if (_mr_conn == NULL)
83e80378 66 return errno;
8defc06b 67 if (connection_status(_mr_conn) == CON_STOPPED) {
68 register status = connection_errno(_mr_conn);
69 if (!status) status = MR_CANT_CONNECT;
70 mr_disconnect();
a4af6a7e 71 return status;
83e80378 72 }
05fb8281 73
74 /*
75 * stash hostname for later use
76 */
77
8defc06b 78 mr_server_host = strsave(server);
79 if (p = index(mr_server_host, ':'))
05fb8281 80 *p = 0;
8defc06b 81 mr_server_host = canonicalize_hostname(mr_server_host);
83e80378 82 return 0;
e2a67c78 83}
84
8defc06b 85int mr_disconnect()
e2a67c78 86{
83e80378 87 CHECK_CONNECTED;
8defc06b 88 _mr_conn = sever_connection(_mr_conn);
89 free(mr_server_host);
90 mr_server_host = 0;
83e80378 91 return 0;
e2a67c78 92}
93
8defc06b 94int mr_host(host, size)
05fb8281 95 char *host;
96 int size;
97{
98 CHECK_CONNECTED;
99
8defc06b 100 /* If we are connected, mr_server_host points to a valid string. */
101 strncpy(host, mr_server_host, size);
05fb8281 102 return(0);
103}
104
8defc06b 105int mr_noop()
e2a67c78 106{
83e80378 107 int status;
8defc06b 108 mr_params param_st;
109 struct mr_params *params = NULL;
110 struct mr_params *reply = NULL;
e2a67c78 111
83e80378 112 CHECK_CONNECTED;
113 params = &param_st;
8defc06b 114 params->mr_version_no = sending_version_no;
115 params->mr_procno = MR_NOOP;
116 params->mr_argc = 0;
117 params->mr_argl = NULL;
118 params->mr_argv = NULL;
e2a67c78 119
8defc06b 120 if ((status = mr_do_call(params, &reply)) == 0)
121 status = reply->mr_status;
ca401c43 122
8defc06b 123 mr_destroy_reply(reply);
6c00b7c4 124
83e80378 125 return status;
6c00b7c4 126}
This page took 0.0759570000000001 seconds and 5 git commands to generate.