summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLogReceiver/LogReceiverbin122376 -> 130952 bytes
-rw-r--r--LogReceiver/Makefile2
-rw-r--r--LogReceiver/logreceiver.cpp57
-rw-r--r--LogReceiver/logreceiver.h4
-rwxr-xr-xUnixDomainSocketServer/serverbin0 -> 7638 bytes
-rw-r--r--UnixDomainSocketServer/server.c74
-rw-r--r--customdhcpcd/src/Makefile4
-rw-r--r--customdhcpcd/src/configure.c2
-rwxr-xr-xcustomdhcpcd/src/customdhcpcdbin173171 -> 175254 bytes
-rw-r--r--customdhcpcd/src/dhcpcd.h1
-rw-r--r--customdhcpcd/src/logwriter.c74
-rw-r--r--customdhcpcd/src/logwriter.h2
12 files changed, 200 insertions, 20 deletions
diff --git a/LogReceiver/LogReceiver b/LogReceiver/LogReceiver
index a16897b..21d42f2 100755
--- a/LogReceiver/LogReceiver
+++ b/LogReceiver/LogReceiver
Binary files differ
diff --git a/LogReceiver/Makefile b/LogReceiver/Makefile
index cd541af..2b6b8c6 100644
--- a/LogReceiver/Makefile
+++ b/LogReceiver/Makefile
@@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: LogReceiver
-# Generated by qmake (2.01a) (Qt 4.7.2) on: Wed Aug 24 10:11:58 2011
+# Generated by qmake (2.01a) (Qt 4.7.2) on: Thu Sep 1 13:01:39 2011
# Project: LogReceiver.pro
# Template: app
# Command: /usr/local/Trolltech/QtEmbedded-4.7.2/bin/qmake -o Makefile LogReceiver.pro
diff --git a/LogReceiver/logreceiver.cpp b/LogReceiver/logreceiver.cpp
index 802f442..1256bfe 100644
--- a/LogReceiver/logreceiver.cpp
+++ b/LogReceiver/logreceiver.cpp
@@ -222,6 +222,60 @@ void LogReceiver::checkInternetConnection(QList<QString> &interfaces) {
checkInternetConnection(nI);
}
}
+
+void LogReceiver::checkConnectivity(QString ifName) {
+ QString command("route");
+ QStringList argList;
+ QString gateway(" ");
+
+ // get gateway address
+ QString pathToGatewayFile(DEFAULT_GATEWAY_INFO_LOCATION);
+ pathToGatewayFile += ifName;
+ QFile file(pathToGatewayFile);
+ if(file.exists()) {
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qDebug() << "couldnt open file:" << pathToGatewayFile;
+ return;
+ }
+ while(!file.atEnd()) {
+ QString line(file.readLine());
+ QStringList gateways = line.split(",");
+ gateway = gateways.first().trimmed();
+ }
+ }
+ else {
+ qDebug() << "file doesn't exist:" << pathToGatewayFile;
+ return;
+ }
+
+ // delete default route
+ argList << "del" << "default";
+ QProcess * p = new QProcess(this);
+ p->start(command, argList);
+ p->waitForFinished();
+
+ // add new default route
+ argList.clear();
+ argList << "add" << "default" << "gw" << gateway << ifName;
+ p = new QProcess(this);
+ p->start(command, argList);
+ p->waitForFinished();
+
+ // check connectivity via tcp connection
+ QTcpSocket *tcpSocket = new QTcpSocket(this);
+ tcpSocket->connectToHost(QString("209.85.148.105"), 80);
+ if (!tcpSocket->waitForConnected(2000)) {
+ qDebug() << "no internet connection with interface" << ifName;
+ qDebug() << tcpSocket->errorString();
+ emit updateStatusLabel(ifName, "connection not possible");
+ } else {
+ qDebug() << "internet: check passed! for interface" << ifName;
+ emit
+ updateStatusLabel(ifName, "connection possible");
+ emit connectionEstablished(ifName);
+ }
+}
+
void LogReceiver::checkInternetConnectionViaTCP(QString ifName) {
const bool canStartIAP = (configurationManager.capabilities()
@@ -418,7 +472,8 @@ void LogReceiver::handleProcessFinished(int exitCode,
emit
updateStatusLabel(ifName, "check connectivity");
//checkInternetConnection(ifName);
- checkInternetConnectionViaTCP(ifName);
+ //checkInternetConnectionViaTCP(ifName);
+ checkConnectivity(ifName);
}
}
QLocalSocket *client = ifNameToClient.value(ifName, 0);
diff --git a/LogReceiver/logreceiver.h b/LogReceiver/logreceiver.h
index ce6d070..a8572d0 100644
--- a/LogReceiver/logreceiver.h
+++ b/LogReceiver/logreceiver.h
@@ -16,7 +16,8 @@ class LogReceiver: public QObject {
Q_OBJECT
#define DEFAULT_QTSOCKETADDRESS "/var/tmp/qt_c_socket_default"
-#define DEFAULT_PATHTODHCPCDEXE "/home/niklas/fbgui/workspace/customdhcpcd/src/customdhcpcd"
+#define DEFAULT_PATHTODHCPCDEXE "/home/niklas/fbgui/customdhcpcd/src/customdhcpcd"
+#define DEFAULT_GATEWAY_INFO_LOCATION "/var/tmp/gateways_"
public:
LogReceiver();
@@ -66,6 +67,7 @@ private:
void checkInternetConnection(QString ifName);
void checkInternetConnection(QList<QString> &interfaces);
void checkInternetConnectionViaTCP(QString ifName);
+ void checkConnectivity(QString ifName);
QList<QString> getListOfNetworkInterfaces();
bool checkBlackList(QString i);
diff --git a/UnixDomainSocketServer/server b/UnixDomainSocketServer/server
new file mode 100755
index 0000000..b90d066
--- /dev/null
+++ b/UnixDomainSocketServer/server
Binary files differ
diff --git a/UnixDomainSocketServer/server.c b/UnixDomainSocketServer/server.c
new file mode 100644
index 0000000..7746b49
--- /dev/null
+++ b/UnixDomainSocketServer/server.c
@@ -0,0 +1,74 @@
+/* A simple server in the internet domain using TCP
+ The port number is passed as an argument */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+void error(const char *msg) {
+ perror(msg);
+ exit(1);
+}
+
+int main(int argc, char *argv[]) {
+ int sockfd, newsockfd;
+ socklen_t clilen;
+ char buffer[1024];
+ char ack[4];
+ struct sockaddr_un serv_addr, cli_addr;
+ int n;
+
+ sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sockfd < 0)
+ error("ERROR opening socket");
+
+ bzero((char *) &serv_addr, sizeof(serv_addr));
+
+ serv_addr.sun_family = AF_UNIX;
+ strcpy(serv_addr.sun_path, "/var/tmp/qt_c_socket_default");
+ unlink("/var/tmp/qt_c_socket_default");
+ if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
+ error("ERROR on binding");
+
+ if (listen(sockfd, 5) == -1) {
+ error("ERROR on listen");
+ }
+
+ strcpy(ack,"ACK");
+
+ for (;;) {
+ int done;
+ printf("Waiting for a connection...\n");
+ clilen = sizeof(cli_addr);
+
+ newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
+ if (newsockfd < 0)
+ error("ERROR on accept");
+
+ printf("Connected.\n");
+ done = 0;
+
+ do {
+ bzero(buffer, 1024);
+ n = read(newsockfd, buffer, 1023);
+ if (n <= 0) {
+ if (n<0) error("ERROR reading from socket");
+ done = 1;
+ }
+ printf("Here is the message: \"%s\"\n", buffer);
+ if(!done) {
+ if (send(newsockfd, ack, sizeof(ack), 0) < 0) {
+ error("ERROR on send");
+ done = 1;
+ }
+ }
+ } while (!done);
+ close(newsockfd);
+ }
+
+ close(sockfd);
+ return 0;
+}
diff --git a/customdhcpcd/src/Makefile b/customdhcpcd/src/Makefile
index 7f90db4..bb1078f 100644
--- a/customdhcpcd/src/Makefile
+++ b/customdhcpcd/src/Makefile
@@ -5,10 +5,10 @@
PROG= customdhcpcd
SRCS= arp.c client.c common.c configure.c dhcp.c dhcpcd.c duid.c \
info.c interface.c ipv4ll.c logger.c logwriter.c signal.c socket.c
-MAN= dhcpcd.8
+MAN=
VERSION= 3.2.3
-CLEANFILES= version.h dhcpcd.8
+CLEANFILES= version.h
BINDIR= ${PREFIX}/sbin
diff --git a/customdhcpcd/src/configure.c b/customdhcpcd/src/configure.c
index 91e3c9f..1eaf8f6 100644
--- a/customdhcpcd/src/configure.c
+++ b/customdhcpcd/src/configure.c
@@ -554,6 +554,8 @@ int configure (const options_t *options, interface_t *iface,
if (dhcp->address.s_addr == 0)
up = 0;
+ logGatewayToFile(iface, dhcp);
+
/* Remove old routes.
* Always do this as the interface may have >1 address not added by us
* so the routes we added may still exist. */
diff --git a/customdhcpcd/src/customdhcpcd b/customdhcpcd/src/customdhcpcd
index 5ef34d0..1fd0594 100755
--- a/customdhcpcd/src/customdhcpcd
+++ b/customdhcpcd/src/customdhcpcd
Binary files differ
diff --git a/customdhcpcd/src/dhcpcd.h b/customdhcpcd/src/dhcpcd.h
index 7deb5b7..3f4c085 100644
--- a/customdhcpcd/src/dhcpcd.h
+++ b/customdhcpcd/src/dhcpcd.h
@@ -43,6 +43,7 @@
/* added by Niklas Goby, additional field, storing the socket address path for
* communicating with Qt "server" */
#define DEFAULT_QTSOCKETADDRESS "/var/tmp/qt_c_socket_default"
+#define DEFAULT_GATEWAY_INFO_LOCATION "/var/tmp/gateways_"
#define QTSOCKETADDRESSLENGTH 255
#define CLASS_ID_MAX_LEN 48
diff --git a/customdhcpcd/src/logwriter.c b/customdhcpcd/src/logwriter.c
index 74c0181..cc7a595 100644
--- a/customdhcpcd/src/logwriter.c
+++ b/customdhcpcd/src/logwriter.c
@@ -1,3 +1,4 @@
+#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
@@ -12,6 +13,7 @@
#include "common.h"
#include "dhcp.h"
#include "dhcpcd.h"
+#include "errno.h"
#include "logger.h"
#include "logwriter.h"
#include "status.h"
@@ -77,25 +79,39 @@ void logToQt(char * status, char * substatus, char * msg) {
void sendToQt(log_msg * msg) {
int n = -1;
+ int t;
const char *tpl = "%s;%d;%d;%s\n";
char *outbuf;
- size_t outbuf_size =
- sizeof(char)*4 + // ";" *3 + newline
- sizeof(int)*2 + // status, substatus
- sizeof(msg->device) + // devicename
- sizeof(msg->msg); // msg
+ char ack[4];
+ size_t outbuf_size = sizeof(char) * 4 + // ";" *3 + newline
+ sizeof(int) * 2 + // status, substatus
+ sizeof(msg->device) + // devicename
+ sizeof(msg->msg); // msg
outbuf = malloc(outbuf_size);
- memset(outbuf,0,outbuf_size);
- snprintf(outbuf, sizeof(char)*3 + sizeof(int)*2 + sizeof(msg->device) + sizeof(msg->msg), tpl, msg->device, msg->status, msg->substatus, msg->msg);
- if (outbuf != NULL){
- n = write(sockfd, outbuf, outbuf_size);
+ memset(outbuf, 0, outbuf_size);
+ snprintf(outbuf, sizeof(char) * 3 + sizeof(int) * 2 + sizeof(msg->device)
+ + sizeof(msg->msg), tpl, msg->device, msg->status, msg->substatus,
+ msg->msg);
+ if (outbuf != NULL) {
+ n = send(sockfd, outbuf, outbuf_size, 0);
}
free(outbuf);
- syslog (LOG_INFO, "[fbgui] INFO writing to socket: [%d:%d] %s (%s)", msg->status, msg->substatus, msg->msg, msg->device);
-// fflush(sockfd);
- if (n < 0) {
- syslog (LOG_ERR, "[fbgui] ERROR writing to socket: [%d:%d] %s (%s)", msg->status, msg->substatus, msg->msg, msg->device);
-// fprintf(stdout, "ERROR writing to socket: %s", msg);
+ syslog(LOG_INFO, "[fbgui] INFO writing to socket: [%d:%d] %s (%s)",
+ msg->status, msg->substatus, msg->msg, msg->device);
+ // fflush(sockfd);
+ if (n <= 0) {
+ syslog(LOG_ERR, "[fbgui] ERROR writing to socket: [%d:%d] %s (%s)",
+ msg->status, msg->substatus, msg->msg, msg->device);
+ // fprintf(stdout, "ERROR writing to socket: %s", msg);
+ }
+ if ((t = recv(sockfd, ack, 4, 0)) > 0) {
+ ack[t] = '\0';
+ syslog(LOG_ERR, "[fbgui] recv ack echo> %s", ack);
+ } else {
+ if (t < 0)
+ syslog(LOG_ERR, "[fbgui] ERROR receiving from socket");
+ else
+ syslog(LOG_ERR, "[fbgui] ERROR Server closed");
}
//usleep(500);
}
@@ -147,3 +163,33 @@ void logLoggerToQt(int level, const char *fmt, va_list args) {
strcat(mesg, "\n");
logToQt(level, DHCPCD_LOG, mesg);
}
+
+void logGatewayToFile(const interface_t *iface, const dhcp_t *dhcp) {
+ FILE *f;
+ route_t *route;
+ char path[QTSOCKETADDRESSLENGTH];
+
+ strcpy(path, DEFAULT_GATEWAY_INFO_LOCATION);
+ strcat(path, iface->name);
+
+ syslog (LOG_INFO, "[fbgui] try to open file: %s", path);
+
+ logger(LOG_DEBUG, "writing %s", iface->infofile);
+ if ((f = fopen(path, "w")) == NULL) {
+ logger(LOG_ERR, "fopen `%s': %s", path, strerror(errno));
+ }
+
+ if (dhcp->routes) {
+ bool doneone = false;
+ STAILQ_FOREACH (route, dhcp->routes, entries) {
+ if (route->destination.s_addr == 0) {
+ if (doneone)
+ fprintf(f, ",");
+ fprintf(f, "%s", inet_ntoa(route->gateway));
+ doneone = true;
+ }
+ }
+ fprintf(f, "\n");
+ }
+ fclose(f);
+}
diff --git a/customdhcpcd/src/logwriter.h b/customdhcpcd/src/logwriter.h
index 1a755fc..11693e5 100644
--- a/customdhcpcd/src/logwriter.h
+++ b/customdhcpcd/src/logwriter.h
@@ -32,6 +32,6 @@ void logToQt(int status, int substatus, const char * msg);
void logSendToQt(int type);
void logLoggerToQt(int level, const char *fmt, va_list args);
//void logToQt(char * status, char * substatus, char * msg);
-
+void logGatewayToFile(const interface_t *iface, const dhcp_t *dhcp);
#endif /* LOGWRITER_H_ */