author | Tero Marttila <terom@fixme.fi> |
Sat, 28 Feb 2009 17:39:37 +0200 | |
changeset 11 | 14e79683c48c |
parent 10 | 9fe218576d13 |
child 12 | 4147fae232d9 |
permissions | -rw-r--r-- |
0 | 1 |
|
2 |
#include <stdlib.h> |
|
3 |
#include <unistd.h> |
|
4 |
#include <stdio.h> |
|
5 |
#include <string.h> |
|
6 |
#include <event.h> |
|
7 |
#include <assert.h> |
|
8 |
||
9 |
#include <err.h> |
|
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
10 |
#include <event2/event.h> |
0 | 11 |
|
1
cf0e1bb6bcab
a fancy socket abstraction layer, with TCP, next, SSL. Also, .hgignore
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
12 |
#include "sock.h" |
8
be88e543c8ff
split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
13 |
#include "line_proto.h" |
1
cf0e1bb6bcab
a fancy socket abstraction layer, with TCP, next, SSL. Also, .hgignore
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
14 |
|
0 | 15 |
#define CONNECT_HOST "irc.fixme.fi" |
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
16 |
#define CONNECT_SERV "6667" |
0 | 17 |
#define LINE_LENGTH 512 |
18 |
||
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
19 |
void on_line (const char *line, void *arg) { |
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
20 |
printf("<<< %s\n", line); |
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
21 |
} |
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
22 |
|
0 | 23 |
int main (int argc, char **argv) { |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
24 |
struct event_base *ev_base; |
1
cf0e1bb6bcab
a fancy socket abstraction layer, with TCP, next, SSL. Also, .hgignore
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
25 |
struct sock_stream *sock; |
8
be88e543c8ff
split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
26 |
struct line_proto *lp; |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
27 |
struct error_info _err; |
0 | 28 |
|
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
29 |
// initialize libevent |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
30 |
if ((ev_base = event_base_new()) == NULL) |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
31 |
err(1, "event_base_new"); |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
32 |
|
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
33 |
// initialize sock module |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
34 |
if (sock_init(ev_base, &_err)) |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
35 |
errx(1, "sock_init: %s", error_msg(&_err)); |
4
a3ca0f97a075
change ERROR_* to use pointers again, and implement error_info for sock_init
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
36 |
|
0 | 37 |
// over-simplified connect |
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
38 |
if (sock_tcp_connect(&sock, CONNECT_HOST, CONNECT_SERV, &_err)) |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
39 |
errx(1, "sock_gnutls_connect: %s", error_msg(&_err)); |
0 | 40 |
|
8
be88e543c8ff
split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
41 |
// line protocol |
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
42 |
if (line_proto_create(&lp, sock, LINE_LENGTH, on_line, NULL, &_err)) |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
43 |
errx(1, "line_proto_create: %s", error_msg(&_err)); |
8
be88e543c8ff
split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
44 |
|
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
45 |
// run event loop |
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
46 |
if (event_base_dispatch(ev_base)) |
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
47 |
errx(1, "event_base_dispatch"); |
0 | 48 |
|
11
14e79683c48c
working event-based operation for sock_tcp
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
49 |
// ok, no cleanup |
0 | 50 |
return 0; |
51 |
} |
|
52 |