Archived
3
0

lib communication : fonctionne (mémoire à vérifier)

This commit is contained in:
Philippe PITTOLI 2016-12-19 19:20:27 +01:00
parent 5ac3285d9b
commit af3c9395ff
7 changed files with 58 additions and 12 deletions

View File

@ -35,6 +35,7 @@ int main (int argc, char *argv[], char *env[])
return EXIT_FAILURE;
}
printf ("msg to send: %s\n", MSG);
if (app_write (&srv, MSG, strlen(MSG)) < 0) {
handle_err("main", "app_write < 0");
return EXIT_FAILURE;

View File

@ -1,6 +1,7 @@
#include "communication.h"
#include "usocket.h"
#include "msg-format.h"
#include "utils.h"
#include <assert.h>
#include <stdio.h>
@ -46,11 +47,15 @@ int srv_init (int argc, char **argv, char **env
int srv_accept (struct service *srv, struct process *p)
{
usock_accept (srv->service_fd, &p->proc_fd);
char *buf;
size_t msgsize = BUFSIZ;
char buf[3];
msg_format_ack (buf);
srv_read (p, &buf, &msgsize);
srv_write (p, buf, 3);
msgsize = 0;
msg_format_ack (buf, NULL, &msgsize);
srv_write (p, buf, msgsize);
return 0;
}
@ -106,12 +111,12 @@ int app_connection (int argc, char **argv, char **env
app_write (srv, send_buffer, msize);
char *buffer;
size_t read_msg_size;
size_t read_msg_size = BUFSIZ;
app_read (srv, &buffer, &read_msg_size);
assert (read_msg_size == 3);
assert (buffer[0] == MSG_TYPE_ACK);
assert (read_msg_size == 3);
return 0;
}

View File

@ -22,17 +22,18 @@ int msg_format_con (char *buf, const char *constr, size_t *msgsize)
short final_size = (short) *msgsize;
memcpy (buf + 1, &final_size, 2);
memcpy (buf + 3, constr, *msgsize);
*msgsize += 3;
return 0;
}
// [type] [len]
// 4 0
int msg_format_ack (char *buf)
int msg_format_ack (char *buf, const char *constr, size_t *msgsize)
{
assert (buf != NULL);
memset(buf, 0, 3);
buf[0] = MSG_TYPE_ACK;
*msgsize += 3;
return 0;
}

View File

@ -8,6 +8,6 @@
#define MSG_TYPE_ACK 4
int msg_format_con (char *buf, const char *constr, size_t *msgsize);
int msg_format_ack (char *buf);
int msg_format_ack (char *buf, const char *constr, size_t *msgsize);
#endif

View File

@ -1,4 +1,5 @@
#include "usocket.h"
#include "utils.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
@ -10,13 +11,15 @@
int usock_send (const int fd, const char *buf, const int msize)
{
print_hexa ("msg send", (unsigned char *)buf, msize);
printf ("msg to send: (%d) \n", msize);
fflush(stdout);
int ret = 0;
//printf ("%ld bytes to write\n", msize);
ret = send (fd, buf, msize, 0);
if (ret <= 0) {
fprintf (stderr, "usock_send: file %s line %d send ret <= 0\n"
, __FILE__, __LINE__);
}
if (ret <= 0)
handle_err ("usock_send", "send ret <= 0");
return ret;
}
@ -37,6 +40,8 @@ int usock_recv (const int fd, char **buf, size_t *msize)
if (*buf == NULL) {
// do not allocate too much memory
if (*msize > BUFSIZ)
handle_err ("usock_recv", "msize > BUFSIZ");
*buf = malloc ((*msize < BUFSIZ) ? *msize : BUFSIZ);
}
@ -48,6 +53,7 @@ int usock_recv (const int fd, char **buf, size_t *msize)
return ret;
}
*msize = (size_t) ret;
print_hexa ("msg recv", (unsigned char *)*buf, *msize);
return ret;
}

22
core/utils.c Normal file
View File

@ -0,0 +1,22 @@
#include "utils.h"
void print_hexa (const char *prefix, unsigned char *val, size_t size)
{
if (! val)
return ;
size_t i;
for(i = 0; i < size; i++)
{
if(! (i % 4))
printf("\n%s (%ld) ", prefix, size);
printf("%2x ", val[i]);
}
printf("\n");
}
void mprint_hexa (char *prefix, unsigned char *buf, size_t length)
{
print_hexa (prefix, buf, length);
}

11
core/utils.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef __UTIL_H__
#define __UTIL_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_hexa (const char *prefix, unsigned char *val, size_t size);
void mprint_hexa (char *prefix, unsigned char *buf, size_t length);
#endif