author | Tero Marttila <terom@fixme.fi> |
Sun, 22 Feb 2009 10:16:28 +0200 | |
changeset 10 | 9fe218576d13 |
parent 9 | 4c4c906cc649 |
child 11 | 14e79683c48c |
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" |
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
|
16 |
#define CONNECT_SERV "6697" |
0 | 17 |
#define LINE_LENGTH 512 |
18 |
||
19 |
int main (int argc, char **argv) { |
|
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
20 |
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
|
21 |
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
|
22 |
struct line_proto *lp; |
10
9fe218576d13
fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
23 |
char *line; |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
24 |
struct error_info _err; |
0 | 25 |
|
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
26 |
// initialize libevent |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
27 |
if ((ev_base = event_base_new()) == NULL) |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
28 |
err(1, "event_base_new"); |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
29 |
|
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
30 |
// initialize sock module |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
31 |
if (sock_init(ev_base, &_err)) |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
32 |
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
|
33 |
|
0 | 34 |
// over-simplified connect |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
35 |
if (sock_gnutls_connect(&sock, CONNECT_HOST, CONNECT_SERV, &_err)) |
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
36 |
errx(1, "sock_gnutls_connect: %s", error_msg(&_err)); |
0 | 37 |
|
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
|
38 |
// line protocol |
10
9fe218576d13
fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
39 |
if (line_proto_create(&lp, sock, LINE_LENGTH, NULL, NULL, &_err)) |
9
4c4c906cc649
add sock_stream_callbacks and ev_base
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
40 |
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
|
41 |
|
0 | 42 |
// read lines and dump them out |
43 |
do { |
|
44 |
// recv |
|
10
9fe218576d13
fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
45 |
if (line_proto_read(lp, &line)) |
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
|
46 |
errx(1, "line_proto_read: %s", error_msg(line_proto_error(lp))); |
0 | 47 |
|
48 |
// printf |
|
10
9fe218576d13
fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
Tero Marttila <terom@fixme.fi>
parents:
9
diff
changeset
|
49 |
printf("<<< %s\n", line); |
0 | 50 |
|
51 |
} while (1); |
|
52 |
||
53 |
// ok |
|
54 |
return 0; |
|
55 |
} |
|
56 |