63
63
HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
65
65
struct HYD_pmcd_pmi_publish *r, *publish;
66
char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
67
int ns_port, ns_fd, i;
66
struct HYD_string_stash stash;
67
char *ns, *ns_host, *ns_port_str;
68
69
HYD_status status = HYD_SUCCESS;
115
116
status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
116
117
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
119
tmp[i++] = HYDU_strdup("PUBLISH");
120
tmp[i++] = HYDU_strdup(name);
121
tmp[i++] = HYDU_strdup(port);
119
HYD_STRING_STASH_INIT(stash);
120
HYD_STRING_STASH(stash, HYDU_strdup("PUBLISH"), status);
121
HYD_STRING_STASH(stash, HYDU_strdup(name), status);
122
HYD_STRING_STASH(stash, HYDU_strdup(port), status);
124
status = HYDU_send_strlist(ns_fd, tmp);
124
status = HYDU_send_strlist(ns_fd, stash.strlist);
125
125
HYDU_ERR_POP(status, "error sending string list\n");
126
HYDU_free_strlist(tmp);
126
HYD_STRING_STASH_FREE(stash);
128
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
129
HYDU_SOCK_COMM_MSGWAIT);
128
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
130
129
HYDU_ERR_POP(status, "error reading from nameserver\n");
131
130
HYDU_ASSERT(!closed, status);
156
155
HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
158
157
struct HYD_pmcd_pmi_publish *r, *publish;
159
char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
160
int ns_port, ns_fd, i;
158
struct HYD_string_stash stash;
159
char *ns, *ns_host, *ns_port_str;
161
161
HYD_status status = HYD_SUCCESS;
163
163
HYDU_FUNC_ENTER();
166
166
if (HYD_server_info.nameserver == NULL) {
167
167
/* no external nameserver available */
169
if (!HYD_pmcd_pmi_publish_list) {
170
/* nothing is published yet */
168
174
if (!strcmp(HYD_pmcd_pmi_publish_list->name, name)) {
169
175
publish = HYD_pmcd_pmi_publish_list;
170
176
HYD_pmcd_pmi_publish_list = HYD_pmcd_pmi_publish_list->next;
213
219
status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
214
220
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
217
tmp[i++] = HYDU_strdup("UNPUBLISH");
218
tmp[i++] = HYDU_strdup(name);
222
HYD_STRING_STASH_INIT(stash);
223
HYD_STRING_STASH(stash, HYDU_strdup("UNPUBLISH"), status);
224
HYD_STRING_STASH(stash, HYDU_strdup(name), status);
221
status = HYDU_send_strlist(ns_fd, tmp);
226
status = HYDU_send_strlist(ns_fd, stash.strlist);
222
227
HYDU_ERR_POP(status, "error sending string list\n");
228
HYD_STRING_STASH_FREE(stash);
224
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
225
HYDU_SOCK_COMM_MSGWAIT);
230
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
226
231
HYDU_ERR_POP(status, "error reading from nameserver\n");
227
232
HYDU_ASSERT(!closed, status);
249
254
HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
251
256
struct HYD_pmcd_pmi_publish *publish;
252
char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
253
int ns_port, ns_fd, i;
257
struct HYD_string_stash stash;
258
char *ns, *ns_host, *ns_port_str;
254
260
HYD_status status = HYD_SUCCESS;
256
262
HYDU_FUNC_ENTER();
286
292
status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
287
293
HYDU_ERR_POP(status, "error connecting to the nameserver\n");
290
tmp[i++] = HYDU_strdup("LOOKUP");
291
tmp[i++] = HYDU_strdup(name);
295
HYD_STRING_STASH_INIT(stash);
296
HYD_STRING_STASH(stash, HYDU_strdup("LOOKUP"), status);
297
HYD_STRING_STASH(stash, HYDU_strdup(name), status);
294
status = HYDU_send_strlist(ns_fd, tmp);
299
status = HYDU_send_strlist(ns_fd, stash.strlist);
295
300
HYDU_ERR_POP(status, "error sending string list\n");
301
HYD_STRING_STASH_FREE(stash);
297
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
298
HYDU_SOCK_COMM_MSGWAIT);
303
status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
299
304
HYDU_ERR_POP(status, "error reading from nameserver\n");
300
305
HYDU_ASSERT(!closed, status);