/* Copyright (c) 2013 Red Hat, Inc. This file is part of GlusterFS. This file is licensed to you under your choice of the GNU Lesser General Public License, version 3 or any later version (LGPLv3 or later), or the GNU General Public License, version 2 (GPLv2), in all cases as published by the Free Software Foundation. */ #include "gf-changelog-rpc.h" #include "changelog-misc.h" #include "changelog-mem-types.h" struct rpc_clnt_program gf_changelog_clnt; /* TODO: piggyback reconnect to called (upcall) */ int gf_changelog_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, void *data) { switch (event) { case RPC_CLNT_CONNECT: rpc_clnt_set_connected (&rpc->conn); break; case RPC_CLNT_DISCONNECT: case RPC_CLNT_MSG: case RPC_CLNT_DESTROY: break; } return 0; } struct rpc_clnt * gf_changelog_rpc_init (xlator_t *this, gf_changelog_t *entry) { char sockfile[UNIX_PATH_MAX] = {0,}; CHANGELOG_MAKE_SOCKET_PATH (entry->brick, sockfile, UNIX_PATH_MAX); return changelog_rpc_client_init (this, entry, sockfile, gf_changelog_rpc_notify); } /** * remote procedure calls declarations. */ int gf_probe_changelog_cbk (struct rpc_req *req, struct iovec *iovec, int count, void *myframe) { return 0; } int gf_probe_changelog_filter (call_frame_t *frame, xlator_t *this, void *data) { int ret = 0; char *sock = NULL; gf_changelog_t *entry = NULL; changelog_probe_req req = {0,}; entry = data; sock = RPC_SOCK (entry); (void) memcpy (&req.sock, sock, strlen (sock)); req.filter = entry->notify; /* invoke RPC */ return changelog_rpc_sumbit_req (RPC_PROBER (entry), (void *) &req, frame, &gf_changelog_clnt, CHANGELOG_RPC_PROBE_FILTER, NULL, 0, NULL, this, gf_probe_changelog_cbk, (xdrproc_t) xdr_changelog_probe_req); } int gf_changelog_invoke_rpc (xlator_t *this, gf_changelog_t *entry, int procidx) { return changelog_invoke_rpc (this, RPC_PROBER (entry), &gf_changelog_clnt, procidx, entry); } struct rpc_clnt_procedure gf_changelog_procs[CHANGELOG_RPC_PROC_MAX] = { [CHANGELOG_RPC_PROC_NULL] = {"NULL", NULL}, [CHANGELOG_RPC_PROBE_FILTER] = { "PROBE FILTER", gf_probe_changelog_filter }, }; struct rpc_clnt_program gf_changelog_clnt = { .progname = "LIBGFCHANGELOG", .prognum = CHANGELOG_RPC_PROGNUM, .progver = CHANGELOG_RPC_PROGVER, .numproc = CHANGELOG_RPC_PROC_MAX, .proctable = gf_changelog_procs, };