The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.

Please select the desired protocol below to get the URL.

This URL has Read-Only access.

Statistics
| Branch: | Revision:

main_repo / deps / liboi / test / echo.c @ 40c0f755

History | View | Annotate | Download (2.12 KB)

1
#include "test/common.c"
2

    
3
int successful_ping_count; 
4

    
5
static void 
6
on_peer_read(oi_socket *socket, const void *base, size_t len)
7
{
8
  if(len == 0) 
9
    return;
10

    
11
  oi_socket_write_simple(socket, base, len);
12
}
13

    
14
static void 
15
on_peer_error(oi_socket *socket, struct oi_error e)
16
{
17
  assert(0);
18
}
19

    
20
static oi_socket* 
21
on_server_connection(oi_server *server, struct sockaddr *addr, socklen_t len)
22
{
23
  oi_socket *socket = malloc(sizeof(oi_socket));
24
  oi_socket_init(socket, 5.0);
25
  socket->on_read = on_peer_read;
26
  socket->on_error = on_peer_error;
27
  socket->on_close = on_peer_close;
28
  socket->on_timeout = on_peer_timeout;
29

    
30
  nconnections++;
31

    
32
#if HAVE_GNUTLS
33
# if SECURE
34
  anon_tls_server(socket);
35
# endif
36
#endif
37

    
38
  //printf("on server connection\n");
39

    
40
  return socket;
41
}
42

    
43
int 
44
main(int argc, const char *argv[])
45
{
46
  int r;
47
  struct ev_loop *loop = ev_default_loop(0);
48
  oi_server server;
49
  oi_socket client;
50

    
51
  //printf("sizeof(oi_server): %d\n", sizeof(oi_server));
52
  //printf("sizeof(oi_socket): %d\n", sizeof(oi_socket));
53

    
54
  oi_server_init(&server, 10);
55
  server.on_connection = on_server_connection;
56

    
57
#if HAVE_GNUTLS
58
# if SECURE
59
  anon_tls_init();
60
# endif
61
#endif
62

    
63
  struct addrinfo *servinfo;
64
  struct addrinfo hints;
65
  memset(&hints, 0, sizeof hints);
66
#if TCP
67
    hints.ai_family = AF_UNSPEC;
68
    hints.ai_socktype = SOCK_STREAM;
69
    hints.ai_flags = AI_PASSIVE;
70
    r = getaddrinfo(NULL, PORT, &hints, &servinfo);
71
    assert(r == 0);
72
#else
73
    struct stat tstat;
74
    if (lstat(SOCKFILE, &tstat) == 0) {
75
      if (S_ISSOCK(tstat.st_mode))
76
        unlink(SOCKFILE);
77
    }
78

    
79
    servinfo = malloc(sizeof(struct addrinfo));
80
    servinfo->ai_family = AF_UNIX;
81
    servinfo->ai_socktype = SOCK_STREAM;
82
    servinfo->ai_protocol = 0;
83

    
84
    struct sockaddr_un *sockaddr = calloc(sizeof(struct sockaddr_un), 1);
85
    sockaddr->sun_family = AF_UNIX;
86
    strcpy(sockaddr->sun_path, SOCKFILE);
87

    
88
    servinfo->ai_addr = (struct sockaddr*)sockaddr;
89
    servinfo->ai_addrlen = sizeof(struct sockaddr_un);
90
#endif
91
  r = oi_server_listen(&server, servinfo);
92
  assert(r == 0);
93
  oi_server_attach(&server, loop);
94

    
95
  ev_loop(loop, 0);
96

    
97
#if TCP
98
  freeaddrinfo(servinfo);
99
#endif
100

    
101
  return 0;
102
}