summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/vmpa.c44
-rw-r--r--src/arch/vmpa.h5
2 files changed, 19 insertions, 30 deletions
diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c
index c32c836..27262d1 100644
--- a/src/arch/vmpa.c
+++ b/src/arch/vmpa.c
@@ -34,9 +34,6 @@
#include <i18n.h>
-#include "../common/io.h"
-
-
/* ---------------------- DEFINITION D'UNE POSITION EN MEMOIRE ---------------------- */
@@ -347,9 +344,8 @@ phys_t compute_vmpa_diff(const vmpa2t *a, const vmpa2t *b)
/******************************************************************************
* *
-* Paramètres : addr = élément à venir lire. [OUT] *
-* fd = flux ouvert en lecture pour l'importation. *
-* flags = éventuelles options d'envoi supplémentaires. *
+* Paramètres : addr = élément à venir lire. [OUT] *
+* pbuf = paquet de données où venir puiser les infos. *
* *
* Description : Lit la définition d'une adresse depuis un flux réseau. *
* *
@@ -359,31 +355,24 @@ phys_t compute_vmpa_diff(const vmpa2t *a, const vmpa2t *b)
* *
******************************************************************************/
-bool recv_vmpa(vmpa2t *addr, int fd, int flags)
+bool unpack_vmpa(vmpa2t *addr, packed_buffer *pbuf)
{
- virt_t val64; /* Valeur sur 64 bits */
- bool status; /* Bilan d'une réception */
-
- status = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL | flags);
- if (!status) return false;
-
- addr->physical = be64toh(val64);
+ bool result; /* Bilan à retourner */
- status = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL | flags);
- if (!status) return false;
+ result = extract_packed_buffer(pbuf, (uint64_t *)&addr->physical, sizeof(uint64_t), true);
- addr->virtual = be64toh(val64);
+ if (result)
+ result = extract_packed_buffer(pbuf, (uint64_t *)&addr->virtual, sizeof(uint64_t), true);
- return true;
+ return result;
}
/******************************************************************************
* *
-* Paramètres : addr = élément à venir écrire. *
-* fd = flux ouvert en écriture pour l'exportation. *
-* flags = éventuelles options d'envoi supplémentaires. *
+* Paramètres : addr = élément à venir écrire. *
+* pbuf = paquet de données où venir inscrire les infos. *
* *
* Description : Ecrit la définition d'une adresse dans un flux réseau. *
* *
@@ -393,17 +382,16 @@ bool recv_vmpa(vmpa2t *addr, int fd, int flags)
* *
******************************************************************************/
-bool send_vmpa(const vmpa2t *addr, int fd, int flags)
+bool pack_vmpa(const vmpa2t *addr, packed_buffer *pbuf)
{
- bool status; /* Bilan d'une émission */
+ bool result; /* Bilan à retourner */
- status = safe_send(fd, (uint64_t []) { htobe64(addr->physical) }, sizeof(uint64_t), MSG_MORE | flags);
- if (!status) return false;
+ result = extend_packed_buffer(pbuf, (uint64_t *)&addr->physical, sizeof(uint64_t), true);
- status = safe_send(fd, (uint64_t []) { htobe64(addr->virtual) }, sizeof(uint64_t), flags);
- if (!status) return false;
+ if (result)
+ result = extend_packed_buffer(pbuf, (uint64_t *)&addr->virtual, sizeof(uint64_t), true);
- return true;
+ return result;
}
diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h
index 6305f79..3bfb40c 100644
--- a/src/arch/vmpa.h
+++ b/src/arch/vmpa.h
@@ -33,6 +33,7 @@
#include "archbase.h"
#include "../common/cpp.h"
+#include "../common/packed.h"
#include "../common/sqlite.h"
@@ -122,10 +123,10 @@ void align_vmpa(vmpa2t *, phys_t);
phys_t compute_vmpa_diff(const vmpa2t *, const vmpa2t *);
/* Lit la définition d'une adresse depuis un flux réseau. */
-bool recv_vmpa(vmpa2t *, int, int);
+bool unpack_vmpa(vmpa2t *, packed_buffer *);
/* Ecrit la définition d'une adresse dans un flux réseau. */
-bool send_vmpa(const vmpa2t *, int, int);
+bool pack_vmpa(const vmpa2t *, packed_buffer *);
/* Transforme une adresse physique en chaîne de caractères. */
char *vmpa2_phys_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], size_t *);