sys/ultrix/Makefile
test/Makefile
test/afpd/Makefile
+ test/netalockd/Makefile
],
[chmod a+x distrib/config/netatalk-config contrib/shell_utils/apple_*]
)
netalockd_SOURCES = main.c
netalockd_LDADD = \
- $(top_builddir)/libevent/libevent.la \
$(top_builddir)/libatalk/libatalk.la \
@PTHREAD_LIBS@
netalockd_LDFLAGS = -static
int main(int argc, char **argv)
{
int ret;
+ int debug = 0;
+ char *address = "127.0.0.1";
+ int port = 4701;
/* Default log setup: log to syslog */
set_processname("netalockd");
- /* Check lockfile and daemonize */
- switch(server_lock("netalockd", _PATH_NETALOCKD_LOCK, 0)) {
- case -1: /* error */
- exit(EXITERR_SYS);
- case 0: /* child */
- break;
- default: /* server */
- exit(0);
- }
-
char c;
static char logconfig[MAXPATHLEN + 21 + 1] = "default log_note";
- char *loglevel, *logfile;
- while ((c = getopt(argc, argv, "l:f:")) != -1 ) {
+ char *loglevel = NULL, *logfile = NULL;
+ while ((c = getopt(argc, argv, "df:l:n:p:")) != -1 ) {
switch (c) {
- case 'l':
- loglevel = strdup(optarg);
+ case 'd':
+ debug = 1;
break;
case 'f':
logfile = strdup(optarg);
break;
+ case 'l':
+ loglevel = strdup(optarg);
+ break;
+ case 'n':
+ address = strdup(optarg);
+ break;
+ case 'p':
+ port = atoi(optarg);
+ break;
}
}
+ /* Check lockfile and daemonize */
+ switch(server_lock("netalockd", _PATH_NETALOCKD_LOCK, debug)) {
+ case -1: /* error */
+ exit(EXITERR_SYS);
+ case 0: /* child */
+ break;
+ default: /* server */
+ exit(0);
+ }
+
/* Setup logging */
if (loglevel) {
strlcpy(logconfig + 8, loglevel, 13);
set_signal();
/* Start listening */
- if (rpc_setup("127.0.0.1", 4701) != 0) {
+ if (rpc_setup(address, port) != 0) {
LOG(log_error, logtype_default, "main: rpc setup error");
exit(1);
}
static void rpc_dummy(const char *name)
{
+ struct lock *lock = NULL;
struct lock_req *lock_req = NULL;
struct lock_rep *lock_rep = NULL;
-
+
+ lock = lock_new();
lock_req = lock_req_new();
lock_rep = lock_rep_new();
+ EVTAG_ASSIGN(lock_req, req_lock, lock);
EVTAG_ASSIGN(lock_req, req_filename, name);
EVRPC_MAKE_REQUEST(lock_msg, rpc_pool, lock_req, lock_rep, msg_rep_cb, NULL);
-// event_base_dispatch(ev_base);
event_dispatch();
}
EC_INIT;
struct evhttp_connection *evcon;
-// EC_NULL_LOG(ev_base = event_base_new());
+ EC_NULL_LOG(ev_base = event_init());
event_set_log_callback(ev_log_cb);
-// EC_NULL_LOG(rpc_pool = evrpc_pool_new(ev_base));
EC_NULL_LOG(rpc_pool = evrpc_pool_new(NULL));
-// EC_NULL_LOG(evcon = evhttp_connection_new(addr, port));
EC_NULL_LOG(evcon = evhttp_connection_new(addr, port));
evrpc_pool_add_connection(rpc_pool, evcon);
FILE *pf;
pid_t pid;
int mask;
-
+
+ if ( !debug ) {
mask = umask(022);
/* check for pid. this can get fooled by stale pid's. */
if ((pf = fopen(pidfile, "r"))) {
/*
* Disassociate from controlling tty.
*/
- if ( !debug ) {
+
int i;
getitimer(ITIMER_PROF, &itimer);
fclose(pf);
return pid;
}
- }
fprintf(pf, "%d\n", getpid());
fclose(pf);
+ }
+
return 0;
}
-SUBDIRS = afpd
+SUBDIRS = netalockd afpd
--- /dev/null
+Makefile
+Makefile.in
+.deps
+.libs
+test
--- /dev/null
+# Makefile.am for test/netalockd/
+
+pkgconfdir = @PKGCONFDIR@
+
+TESTS = test.sh
+EXTRA_DIST = test.sh
+check_PROGRAMS = test
+
+test_SOURCES = test.c
+test_LDADD = $(top_builddir)/libatalk/libatalk.la @PTHREAD_LIBS@
+test_LDFLAGS = -static
--- /dev/null
+/*
+ * Copyright (c) 2010 Frank Lahm
+ * All Rights Reserved. See COPYRIGHT.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <sys/queue.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "event2/event-config.h"
+
+#include "event2/event.h"
+#include "event2/http.h"
+#include "event2/event_compat.h"
+#include "event2/http_compat.h"
+#include "event2/rpc.h"
+#include "event2/rpc_struct.h"
+
+#include <atalk/logger.h>
+#include <atalk/errchk.h>
+#include <atalk/locking.h>
+#include <atalk/adouble.h>
+#include <atalk/bstrlib.h>
+#include <atalk/bstradd.h>
+
+EVRPC_HEADER(lock_msg, lock_req, lock_rep)
+EVRPC_GENERATE(lock_msg, lock_req, lock_rep)
+
+static struct event_base *ev_base;
+static struct evrpc_pool *rpc_pool;
+
+static void ev_log_cb(int severity, const char *msg)
+{
+ LOG(log_warning, logtype_default, (char *)msg);
+}
+
+static void msg_rep_cb(struct evrpc_status *status,
+ struct lock_req *req,
+ struct lock_rep *rep,
+ void *arg)
+{
+ if (status->error != EVRPC_STATUS_ERR_NONE)
+ goto done;
+
+done:
+ event_base_loopexit(ev_base, NULL);
+}
+
+static void do_one_rpc(const char *name)
+{
+ struct lock *lock = NULL;
+ struct lock_req *lock_req = NULL;
+ struct lock_rep *lock_rep = NULL;
+
+ lock = lock_new();
+ lock_req = lock_req_new();
+ lock_rep = lock_rep_new();
+
+ EVTAG_ASSIGN(lock_req, req_lock, lock);
+ EVTAG_ASSIGN(lock_req, req_filename, name);
+
+ EVRPC_MAKE_REQUEST(lock_msg, rpc_pool, lock_req, lock_rep, msg_rep_cb, NULL);
+
+ event_dispatch();
+}
+
+static int my_rpc_init(const char *addr, unsigned short port)
+{
+ EC_INIT;
+ struct evhttp_connection *evcon;
+
+ EC_NULL_LOG(ev_base = event_init());
+ event_set_log_callback(ev_log_cb);
+ EC_NULL_LOG(rpc_pool = evrpc_pool_new(NULL));
+ EC_NULL_LOG(evcon = evhttp_connection_new(addr, port));
+ evrpc_pool_add_connection(rpc_pool, evcon);
+
+EC_CLEANUP:
+ EC_EXIT;
+}
+
+int main(int argc, char **argv)
+{
+ if (my_rpc_init("127.0.0.1", 4702) != 0)
+ return 1;
+ do_one_rpc("test");
+ return 0;
+}
--- /dev/null
+#!/bin/sh
+../../etc/netalockd/netalockd -d -p 4702 &
+PID=$!
+sleep 1
+./test
+kill $PID
+exit $?
\ No newline at end of file