summaryrefslogtreecommitdiff
path: root/dpid/dpi_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'dpid/dpi_service.c')
-rw-r--r--dpid/dpi_service.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/dpid/dpi_service.c b/dpid/dpi_service.c
new file mode 100644
index 00000000..07cdad8e
--- /dev/null
+++ b/dpid/dpi_service.c
@@ -0,0 +1,114 @@
+/*
+ Copyright (C) 2003 Ferdi Franceschini <ferdif@optusnet.com.au>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*! \file
+ * \todo
+ * This module should be removed because its original functions
+ * have been removed or modified.
+ * Put these functions in dpid.c
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include "dpid_common.h"
+#include "dpid.h"
+#include "../dpip/dpip.h"
+
+#ifdef TEST
+#include "testdat.h"
+#endif
+
+/* exported functions */
+char *get_dpi_dir(char *dpidrc);
+
+
+/*! Get dpi directory path from dpidrc
+ * \Return
+ * dpi directory on success, NULL on failure
+ * \Important
+ * The dpi_dir definition in dpidrc must have no leading white space.
+ */
+char *get_dpi_dir(char *dpidrc)
+{
+ FILE *In;
+ int len;
+ char *rcline = NULL, *value = NULL, *p;
+
+ if ((In = fopen(dpidrc, "r")) == NULL) {
+ ERRMSG("dpi_dir", "fopen", errno);
+ MSG_ERR(" - %s\n", dpidrc);
+ return (NULL);
+ }
+
+ while ((rcline = dGetline(In)) != NULL) {
+ if (strncmp(rcline, "dpi_dir", 7) == 0)
+ break;
+ dFree(rcline);
+ }
+ fclose(In);
+
+ if (!rcline) {
+ ERRMSG("dpi_dir", "Failed to find a dpi_dir entry in dpidrc", 0);
+ MSG_ERR("Put your dillo plugins path in %s\n", dpidrc);
+ MSG_ERR("eg. dpi_dir=/usr/local/lib/dillo/dpi ");
+ MSG_ERR("with no leading spaces.\n");
+ value = NULL;
+ } else {
+ len = (int) strlen(rcline);
+ if (len && rcline[len - 1] == '\n')
+ rcline[len - 1] = 0;
+
+ if ((p = strchr(rcline, '='))) {
+ while (*++p == ' ');
+ value = dStrdup(p);
+ } else {
+ ERRMSG("dpi_dir", "strchr", 0);
+ MSG_ERR(" - '=' not found in %s\n", rcline);
+ value = NULL;
+ }
+ }
+
+ dFree(rcline);
+ return (value);
+}
+
+/*! Send the list of available dpi IDs to a client
+ * \Return
+ * 1 on success, -1 on failure.
+ *
+static int send_service_list(int sock, struct dp *dpi_attr_list, int srv_num)
+{
+ int i;
+ char *buf;
+ ssize_t wlen = 0;
+
+ for (i = 0; i < srv_num && wlen != -1; i++) {
+ d_cmd = a_Dpip_build_cmd("cmd=%s msg=%s",
+ "send_data", dpi_attr_list[i].id);
+ wlen = write(sock, d_cmd, strlen(d_cmd));
+ dFree(d_cmd);
+ }
+ if (wlen == -1) {
+ ERRMSG("send_service_list", "write", errno);
+ return (-1);
+ }
+ return (1);
+}
+ */