Merge remote-tracking branch 'refs/remotes/origin/master'
authorLaurent Mazet <mazet@softndesign.org>
Fri, 21 Mar 2025 22:46:22 +0000 (23:46 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Fri, 21 Mar 2025 22:46:22 +0000 (23:46 +0100)
1  2 
morep.h
morep_test.c

diff --cc morep.h
index 6fd38f072637317347e0ed9b8340337241b50220,0d7aa980f67ba0cd0dd1406ae67891708815eef0..6c91bb63e895c4aba50446f64d018dae1c5d4a8a
+++ b/morep.h
@@@ -73,55 -50,8 +50,8 @@@ __BEGIN_DECL
     @see MOREP_Send()
     @see MOREP_Receive()
  */
 -int MOREP_Connect (char *local_address, char *remote_address);
 +int MOREP_Connect (char *url);
  
- /**
-    @ingroup MOREP
-    Check if connection is established, typ. called after MOREP_Connect()
-    @param morep file descriptor retuned by MOREP_Connect
-    @return -1=error, 0=not yet connected, 1=connected
-    @see MOREP_Connect()
- */
- int MOREP_Is_Connected (int morep);
- /**
-    @ingroup MOREP
-    Accept an incoming connection. Returns immediately, even there is
-    no pending incoming connection.
-    @param morep file descriptor retuned by MOREP_Create()
-    @return a new file descriptor associated with this connection or -1,
-    errno=EWOULDBLOCK if there is no pending connection.
-    @see MOREP_Create()
-    @see MOREP_Reject()
-    @see MOREP_Close()
-    @see MOREP_Send()
-    @see MOREP_Receive()
- */
- int MOREP_Accept (int morep);
- /**
-    @ingroup MOREP
-    Reject an incoming connection. Returns immediately.
-    @param morep file descriptor retuned by MOREP_Create()
-    @see MOREP_Create()
-    @see MOREP_Accept()
-    @see MOREP_Close()
-    @see MOREP_Send()
-    @see MOREP_Receive()
- */
- void MOREP_Reject (int morep);
  /**
     @ingroup MOREP
  
diff --cc morep_test.c
index ba8b9f8f4b88c00b43e39777a689b3610e186dfb,0000000000000000000000000000000000000000..b9d3544cdb0c1d664dd12889964abf88b1641426
mode 100644,000000..100644
--- /dev/null
@@@ -1,225 -1,0 +1,227 @@@
- #include "debug.h"
 +/*
 +  File name        : morep_test.c
 +  Projet           : MERLIN
 +  Date of creation : 2025/03/18
 +  Version          : 1.0
 +  Copyright        : Thales SIX
 +  Author           : Laurent Mazet <laurent.mazet@thalesgroup.com>
 +
 +  Description      : Test programm for MOREP library
 +
 +  History          :
 +  - initial version
 +*/
 +
 +/* depend: */
 +/* cflags: */
 +/* linker: morep.o */
 +/* winlnk: morep.o */
 +
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <errno.h>
 +#include <assert.h>
 +#include <pthread.h>
 +#include <string.h>
 +#include <unistd.h>
 +
-         VERBOSE (morep, ERROR, PRINTF ("MOREP_Connect (%d)", errno);
++#include "verbose.h"
 +
 +#include "morep.h"
 +
++#define UNUSED __attribute__ ((unused))
++
 +int MOREP_Accept_NONBLOCK_OK = 0;
 +int MOREP_Receive_NONBLOCK_OK = 0;
 +int MOREP_Send_OK = 0;
 +int MOREP_Echo_OK = 0;
 +
 +int test_client (char *local_address, char *remote_address)
 +{
 +    VERBOSE (morep, TRACE, PRINTF ("test_client\n"));
 +
 +    int count;
 +    unsigned char tx_data[10][8192];
 +    unsigned long tx_msgtype[10];
 +    int tx_len[10];
 +
 +    VERBOSE (morep, INFO, PRINTF ("%s started\n", remote_address));
 +
 +    int morep = MOREP_Connect (local_address, remote_address);
 +    if (morep < 0) {
 +        VERBOSE (morep, ERROR, PRINTF ("%s MOREP_Connect error\n", remote_address));
 +        return -1;
 +    }
 +
 +    VERBOSE (morep, INFO, PRINTF ("%s connected to server, trying to exchange 10 messages\n", remote_address));
 +
 +    for (count = 0; count < 10; count++) {
 +            int i, rc;
 +
 +            /* to valid non block */
 +            if (count == 5)
 +                sleep (1);
 +
 +            tx_len[count] = rand () % sizeof (tx_data[count]);
 +            tx_msgtype[count] = rand ();
 +            for (i = 0; i < tx_len[count]; i++)
 +                tx_data[count][i] = rand () % 256;
 +
 +            rc = MOREP_Send (morep, tx_msgtype[count], tx_data[count], tx_len[count]);
 +            if (rc < 0) {
 +                VERBOSE (morep, ERROR, PRINTF ("%s MOREP_Send tx error\n", remote_address));
 +                return -1;
 +
 +            }
 +            if (tx_len[count] != rc) {
 +                VERBOSE (morep, ERROR, PRINTF ("%s MOREP_Send tx len error tx=%d rc=%d\n", remote_address, tx_len[count], rc));
 +                return -1;
 +            }
 +    }
 +
 +    for (count = 0; count < 10; count++) {
 +        int rx_len;
 +        unsigned char rx_data[32768];
 +        unsigned long rx_msgtype;
 +
 +
 +        do {
 +            rx_len = MOREP_Receive (morep, &rx_msgtype, rx_data, sizeof (rx_data));
 +            if (rx_len == 0)
 +                sleep (1);
 +        } while (rx_len == 0);
 +
 +        VERBOSE (morep, INFO, PRINTF ("%s echo received count=%d len=%d, morep=%d\n", remote_address, count, rx_len, morep));
 +
 +        if (tx_len[count] != rx_len) {
 +            VERBOSE (morep, WARNING, PRINTF ("%s MOREP_Receive rx len error : tx=%d / rx=%d\n", remote_address, tx_len[count], rx_len));
 +            return -1;
 +        }
 +
 +        if (tx_msgtype[count] != rx_msgtype) {
 +            VERBOSE (morep, WARNING, PRINTF ("%s MOREP_Receive rx msgtype error : tx=%08lX / rx=%08lX\n", remote_address, tx_msgtype[count], rx_msgtype));
 +            return -1;
 +        }
 +
 +        if (memcmp (rx_data, tx_data[count], tx_len[count]) != 0 ) {
 +            VERBOSE (morep, WARNING, PRINTF ("%s MOREP_Receive rx corrupted data\n",remote_address));
 +            return -1;
 +        }
 +    }
 +
 +    MOREP_Close (morep);
 +    VERBOSE (morep, INFO, PRINTF ("%s end of test, %d echo processed\n", remote_address, count));
 +    return 0;
 +}
 +
 +void *rep_server (UNUSED void *dummy)
 +{
 +    VERBOSE (morep, TRACE, PRINTF ("rep_server\n"));
 +
 +    VERBOSE (morep, INFO, PRINTF ("rep_server started\n"));
 +
 +    int morep = MOREP_Connect ("rep://01:02:03:04:05:06/2064", "rep://07:08:08:0a:0b:0C/2065"); /* 0x0810 / 0x0811 */
 +    if (morep < 0) {
-         int rc = test_client ("rep://07:08:08:0a:0b:0C/2065" "rep://01:02:03:04:05:06/2064");
++        VERBOSE (morep, ERROR, PRINTF ("MOREP_Connect (%d)", errno));
 +        exit (1);
 +    }
 +
 +    VERBOSE (morep, INFO, PRINTF ("rep_server waiting for data\n"));
 +
 +    while (1) {
 +        unsigned char data[1024];
 +        unsigned long msgtype;
 +
 +        int rx_len = MOREP_Receive (morep, &msgtype, data, sizeof (data));
 +        if (rx_len == 0) {
 +            MOREP_Receive_NONBLOCK_OK = 1;
 +            sleep (1);
 +            continue;
 +        }
 +        if (rx_len < 0) {
 +            MOREP_Close (morep);
 +            break;
 +        }
 +
 +        VERBOSE (morep, INFO, PRINTF ("rep_server receive data len=%d, sending echo\n", rx_len));
 +
 +        int tx_len = MOREP_Send (morep, msgtype, data, rx_len);
 +        if (tx_len == rx_len)
 +            MOREP_Send_OK = 1;
 +    }
 +
 +    return NULL;
 +}
 +
 +void *rep_client (UNUSED void *dummy)
 +{
 +    int i;
 +
 +    for (i = 0; i < 5; i++) {
++        int rc = test_client ("rep://07:08:08:0a:0b:0C/2065", "rep://01:02:03:04:05:06/2064");
 +        if (rc)
 +            pthread_exit (&MOREP_Echo_OK);
 +    }
 +
 +    MOREP_Echo_OK = 1;
 +    pthread_exit (&MOREP_Echo_OK);
 +    return NULL;
 +}
 +
 +/**
 +   Dump status macro
 +*/
 +#define DUMP_STATUS(x) do {                      \
 +      printf (#x " %s\n", (x) ? "OK" : "BAD"); \
 +      if (!(x))                                \
 +            failed = 1;                          \
 +    } while (0)                                  \
 +
 +/**
 +   Verbose level
 +*/
 +DECLARE_VERBOSE_LEVEL (morep, INFO);
 +
 +int main (int argc, char **argv)
 +{
 +
 +    /* process arguments */
 +    if (argc > 1) {
 +        CHANGE_VERBOSE_LEVEL (morep, atoi (argv[1]));
 +        argc--;
 +    }
 +    if (argc > 1) {
 +        printf ("usage: %s [verbose level]\n", argv[0]);
 +        exit (1);
 +    }
 +
 +    printf ("*** STARTING TEST SEQUENCE ***\n");
 +
 +    pthread_t rep_thread;
 +
 +    pthread_create (&rep_thread, NULL, rep_server, NULL);
 +
 +    /* Give some delay to server to setup there MOREP */
 +    sleep (1);
 +
 +    pthread_t rep_client_thread;
 +
 +    pthread_create (&rep_client_thread, NULL, rep_client, NULL);
 +
 +    pthread_join (rep_client_thread, NULL);
 +    
 +    printf ("*** END OF TEST SEQUENCE ***\n");
 +
 +    int failed = 0;
 +    DUMP_STATUS (MOREP_Accept_NONBLOCK_OK);
 +    DUMP_STATUS (MOREP_Receive_NONBLOCK_OK);
 +    DUMP_STATUS (MOREP_Send_OK);
 +    DUMP_STATUS (MOREP_Echo_OK);
 +
 +    return failed ? EXIT_FAILURE : EXIT_SUCCESS;
 +}
 +
 +/* test: morep_test */
 +/* test: morep_test 1 */
 +
 +/* vi:set tabstop=4 expandtab shiftwidth=4: this line set vi mode*/