summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/daemon/source/daemon.cc
authormjm <mjm>2002-11-12 22:12:33 (UTC)
committer mjm <mjm>2002-11-12 22:12:33 (UTC)
commiteaecbed44924ece119c5b41db2828b4554f263d2 (patch) (side-by-side diff)
treeb87dd3d049ea1768b20192f6c674f8684a41282c /noncore/net/wellenreiter/daemon/source/daemon.cc
parent15bc80dffd7a4c52985a742cb3a439da42692478 (diff)
downloadopie-eaecbed44924ece119c5b41db2828b4554f263d2.zip
opie-eaecbed44924ece119c5b41db2828b4554f263d2.tar.gz
opie-eaecbed44924ece119c5b41db2828b4554f263d2.tar.bz2
pre-alpha version, most things does not work yet.
todo: communication protocol with GUI and implementation of sniffer
Diffstat (limited to 'noncore/net/wellenreiter/daemon/source/daemon.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/daemon/source/daemon.cc82
1 files changed, 82 insertions, 0 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/daemon.cc b/noncore/net/wellenreiter/daemon/source/daemon.cc
new file mode 100644
index 0000000..7972c0f
--- a/dev/null
+++ b/noncore/net/wellenreiter/daemon/source/daemon.cc
@@ -0,0 +1,82 @@
+/*
+ * Startup functions of wellenreiter
+ *
+ * $Id$
+ */
+
+#include "config.hh"
+#include "daemon.hh"
+#include "log.hh"
+#include "sendgui.hh"
+#include "getgui.hh"
+
+/* Main function of wellenreiterd */
+int main(int argc, char **argv)
+{
+ int sock, maxfd;
+ struct sockaddr_in *cliaddr;
+ socklen_t len=sizeof(struct sockaddr);
+ char buffer[128];
+ FILE *fp=stdin; /* Will be replaced with sniffer */
+ fd_set rset;
+
+ fprintf(stderr, "wellenreiterd %s\n\n", VERSION);
+
+ /* Setup socket for incoming commands */
+ if(!commsock(&sock))
+ return 0;
+
+ log_info("Set up socket '%d' for GUI communication", sock);
+
+ FD_ZERO(&rset);
+
+ /* Start main loop */
+ log_info("Starting main loop");
+ while(1)
+ {
+
+ FD_SET(sock, &rset);
+ FD_SET(fileno(fp), &rset);
+ maxfd=sock+fileno(fp)+1;
+ if(select(maxfd, &rset, NULL, NULL, NULL) < 0)
+ {
+ log_err("Error calling select: %s", strerror(errno));
+ break;
+ }
+
+ /* Got data on local socket from GUI */
+ if(FD_ISSET(sock, &rset))
+ {
+ memset(buffer, 0, sizeof(buffer));
+ if(recvfrom(sock, buffer, sizeof(buffer)-1, 0, (struct sockaddr *)cliaddr, &len) < 0)
+ {
+ log_err("Cannot read from socket: %s", strerror(errno));
+ break;
+ }
+ log_info("Received command from '%s': %s", inet_ntoa(cliaddr->sin_addr), buffer);
+
+ /* Pass string to analyze function */
+ commstring(buffer);
+
+ }
+
+ /* Will be replaced with sniffer ... later */
+ if(FD_ISSET(fileno(fp), &rset))
+ {
+ memset(buffer, 0, sizeof(buffer));
+ if(fgets(buffer, sizeof(buffer) - 1, fp) == NULL)
+ {
+ log_err("Cannot read from stdin: %s", strerror(errno));
+ break;
+ }
+
+ /* Send string to GUI */
+ sendgui("%d: %s", 1234, buffer);
+
+ }
+
+ }
+
+ close(sock);
+ return 0;
+}