+static void lock_msg_cb(EVRPC_STRUCT(lock_msg)* rpc, void *arg _U_)
+{
+ int ret = 0;
+ char *filename;
+ struct lock_req *request = rpc->request;
+ struct lock_rep *reply = rpc->reply;
+
+ if (EVTAG_GET(request, req_filename, &filename) == -1) {
+ LOG(log_error, logtype_default, "lock_msg_cb: no filename");
+ exit(1);
+ }
+
+ LOG(log_warning, logtype_default, "lock_msg_cb(file: \"%s\")", filename);
+
+ /* we just want to fill in some non-sense */
+ EVTAG_ASSIGN(reply, result, 0);
+
+ /* no reply to the RPC */
+ EVRPC_REQUEST_DONE(rpc);
+}
+
+static int rpc_setup(const char *addr, uint16_t port)
+{
+ eventbase = event_base_new();
+
+ if ((http = evhttp_new(eventbase)) == NULL) {
+ LOG(log_error, logtype_default, "rpc_setup: error in evhttp_new: %s", strerror(errno));
+ return -1;
+ }
+
+ if (evhttp_bind_socket(http, addr, port) != 0) {
+ LOG(log_error, logtype_default, "rpc_setup: error in evhttp_new: %s", strerror(errno));
+ return -1;
+ }
+
+ rpcbase = evrpc_init(http);
+
+ EVRPC_REGISTER(rpcbase, lock_msg, lock_req, lock_rep, lock_msg_cb, NULL);
+
+ return 0;
+}
+
+static void rpc_teardown(struct evrpc_base *rpcbase)
+{
+ EVRPC_UNREGISTER(rpcbase, lock_msg);
+ evrpc_free(rpcbase);
+}
+