summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-09-21 19:29:39 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-09-21 19:29:39 (GMT)
commitb6afbe8c699ae76443628badae33beee9934c6bc (patch)
tree69878624d3ae529314a9824f0c0ceca8bca617b7 /src/common
parent291968f4f4a5e85f6963813a43f2176320fb8d49 (diff)
Provided a real welcome panel at startup, with tricks and actions.
Diffstat (limited to 'src/common')
-rwxr-xr-xsrc/common/Makefile.am1
-rw-r--r--src/common/net.c57
-rw-r--r--src/common/net.h4
-rw-r--r--src/common/shuffle.c78
-rw-r--r--src/common/shuffle.h37
5 files changed, 177 insertions, 0 deletions
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 9e9969d..02c1718 100755
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -16,6 +16,7 @@ libcommon_la_SOURCES = \
macros.h \
net.h net.c \
pathname.h pathname.c \
+ shuffle.h shuffle.c \
sort.h sort.c \
sqlite.h sqlite.c \
xdg.h xdg.c \
diff --git a/src/common/net.c b/src/common/net.c
index aba5ba2..b741883 100644
--- a/src/common/net.c
+++ b/src/common/net.c
@@ -24,6 +24,7 @@
#include "net.h"
+#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
@@ -100,3 +101,59 @@ int connect_via_tcp(const char *server, const char *port, struct sockaddr_in *ad
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : sock = nom ou adresse du serveur à contacter. *
+* buffer = tampon pour la réception des données. [OUT] *
+* max = taille prévue pour ce tampon. *
+* len = quantité de données effectivement reçues. [OUT] *
+* *
+* Description : Reçoit du réseau autant de données que possible. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool recv_all(int sock, char *buffer, size_t max, size_t *len)
+{
+ bool result; /* Bilan global à retourner */
+ ssize_t ret; /* Bilan d'un appel */
+
+ result = true;
+
+ buffer[0] = '\0';
+ max--; /* '\0' final */
+ *len = 0;
+
+ do
+ {
+ ret = recv(sock, buffer + *len, max, *len > 0 ? MSG_DONTWAIT : 0);
+
+ printf("ret = %zd\n", ret);
+
+ if (ret == -1 && *len == 0)
+ {
+ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ continue;
+ else
+ result = false;
+ }
+
+ else if (ret > 0)
+ {
+ max -= ret;
+ *len += ret;
+ }
+
+ }
+ while (ret > 0);
+
+ buffer[*len] = '\0';
+
+ return result;
+
+}
diff --git a/src/common/net.h b/src/common/net.h
index 80f7496..d9ec6f9 100644
--- a/src/common/net.h
+++ b/src/common/net.h
@@ -26,12 +26,16 @@
#include <netdb.h>
+#include <stdbool.h>
/* Ouvre une connexion TCP à un serveur quelconque. */
int connect_via_tcp(const char *, const char *, struct sockaddr_in *);
+/* Reçoit du réseau autant de données que possible. */
+bool recv_all(int, char *, size_t, size_t *);
+
#endif /* _COMMON_NET_H */
diff --git a/src/common/shuffle.c b/src/common/shuffle.c
new file mode 100644
index 0000000..6b20866
--- /dev/null
+++ b/src/common/shuffle.c
@@ -0,0 +1,78 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * shuffle.c - permtutation aléatoire des éléments d'un ensemble fini
+ *
+ * Copyright (C) 2016 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA 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.
+ *
+ * OpenIDA 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "shuffle.h"
+
+
+#include <malloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/******************************************************************************
+* *
+* Paramètres : panel = instance d'objet GLib à traiter. *
+* *
+* Description : Mélange le contenu d'une liste. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void shuffle(void *base, size_t nmemb, size_t size)
+{
+ char *list; /* Conversion pour le confort */
+ char *tmp; /* Lieu de transition */
+ size_t i; /* Boucle de parcours */
+ size_t j; /* Emplacement aléatoire */
+
+ /**
+ * Application de l'algorithme Fisher-Yates.
+ *
+ * Cf. https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
+ */
+
+ if (nmemb > 1)
+ {
+ list = (char *)base;
+
+ tmp = malloc(size);
+
+ for (i = 0; i < (nmemb - 1); i++)
+ {
+ j = i + rand() % (nmemb - i);
+
+ memcpy(tmp, list + i * size, size);
+ memcpy(list + i * size, list + j * size, size);
+ memcpy(list + j * size, tmp, size);
+
+ }
+
+ free(tmp);
+
+ }
+
+}
diff --git a/src/common/shuffle.h b/src/common/shuffle.h
new file mode 100644
index 0000000..c1a0367
--- /dev/null
+++ b/src/common/shuffle.h
@@ -0,0 +1,37 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * shuffle.h - prototypes pour la permtutation aléatoire des éléments d'un ensemble fini
+ *
+ * Copyright (C) 2016 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA 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.
+ *
+ * OpenIDA 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _COMMON_SHUFFLE_H
+#define _COMMON_SHUFFLE_H
+
+
+#include <sys/types.h>
+
+
+
+/* Mélange le contenu d'une liste. */
+void shuffle(void *, size_t, size_t);
+
+
+
+#endif /* _COMMON_SHUFFLE_H */