15
15
16
16
uv_loop_t * loop ;
17
17
18
- char * (* ondata_cb )(void * client , size_t len , char * data );
19
- void (* onconnect_cb )(void * * client );
20
- void (* ondisconnect_cb )(void * client );
18
+ char * (* ondata_cb )(void * stream , void * clientdata , size_t len , char * data );
19
+ void (* onconnect_cb )(void * stream , void * * clientdata );
20
+ void (* ondisconnect_cb )(void * stream , void * clientdata );
21
21
22
22
static void on_alloc (uv_handle_t * handle , size_t suggested_size , uv_buf_t * buf ) {
23
23
buf -> len = suggested_size ;
@@ -34,18 +34,19 @@ static void on_write(uv_write_t *req, int status) {
34
34
35
35
static void on_read (uv_stream_t * stream , ssize_t nread , const uv_buf_t * buf ) {
36
36
if (nread == UV_EOF ) {
37
- ondisconnect_cb (stream -> data );
38
- uv_close ((uv_handle_t * )stream , NULL );
37
+ ondisconnect_cb (stream , stream -> data );
38
+ uv_close ((uv_handle_t * )stream , NULL );
39
39
return ;
40
40
}
41
41
42
42
if (nread < 0 ) {
43
- shout ("read failed (error %d)\n" , nread );
44
- uv_close ((uv_handle_t * )stream , NULL );
43
+ shout ("read failed (error %zd)\n" , nread );
44
+ ondisconnect_cb (stream , stream -> data );
45
+ uv_close ((uv_handle_t * )stream , NULL );
45
46
return ;
46
47
}
47
48
48
- char * response = ondata_cb (stream -> data , nread , buf -> base );
49
+ char * response = ondata_cb (stream , stream -> data , nread , buf -> base );
49
50
free (buf -> base );
50
51
51
52
if (response ) {
@@ -71,16 +72,16 @@ static void on_connect(uv_stream_t *server, int status) {
71
72
return ;
72
73
}
73
74
uv_tcp_nodelay (client , 1 );
74
- onconnect_cb (& client -> data );
75
+ onconnect_cb (client , & client -> data );
75
76
uv_read_start ((uv_stream_t * )client , on_alloc , on_read );
76
77
}
77
78
78
79
int eventwrap (
79
80
const char * host ,
80
81
int port ,
81
- char * (* ondata )(void * client , size_t len , char * data ),
82
- void (* onconnect )(void * * client ),
83
- void (* ondisconnect )(void * client )
82
+ char * (* ondata )(void * stream , void * clientdata , size_t len , char * data ),
83
+ void (* onconnect )(void * stream , void * * clientdata ),
84
+ void (* ondisconnect )(void * stream , void * clientdata )
84
85
) {
85
86
ondata_cb = ondata ;
86
87
onconnect_cb = onconnect ;
@@ -109,3 +110,10 @@ int eventwrap(
109
110
110
111
return uv_run (loop , UV_RUN_DEFAULT );
111
112
}
113
+
114
+ void write_to_stream (void * stream , char * data ) {
115
+ uv_write_t * wreq = malloc (sizeof (uv_write_t ));
116
+ uv_buf_t wbuf = uv_buf_init (data , strlen (data ));
117
+ uv_write (wreq , (uv_stream_t * )stream , & wbuf , 1 , on_write );
118
+ free (data );
119
+ }
0 commit comments