00001
00002
00003
00004
00005
00006
00007
00008 #ifndef LINK_H
00009 #define LINK_H
00010
00044 #include "int_sizes.h"
00045
00046 #include <time.h>
00047 #include <limits.h>
00048 #include <stdio.h>
00049 #include <stdarg.h>
00050 #include <sys/types.h>
00051
00053 #define LINK_ADDRESS_MAX 48
00054
00056 #define LINK_PORT_ANY 0
00057
00059 #define LINK_FOREVER ((time_t)INT_MAX)
00060
00067 struct link * link_connect( const char *addr, int port, time_t stoptime );
00068
00075 struct link * link_serve( int port );
00076
00084 struct link * link_serve_address( const char *addr, int port );
00085
00091 struct link * link_accept( struct link *master, time_t stoptime );
00092
00102 int link_read( struct link *link, char *data, size_t length, time_t stoptime );
00103
00113 int link_read_avail( struct link *link, char *data, size_t length, time_t stoptime );
00114
00122 int link_write( struct link *link, const char *data, size_t length, time_t stoptime );
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 int link_putlstring( struct link *link, const char *str, size_t len, time_t stoptime);
00133
00134
00135
00136
00137
00138
00139
00140
00141 #define link_putstring(l,s,t) (link_putlstring(l,s,strlen(s),t))
00142
00143
00144
00145
00146
00147
00148
00149
00150 #define link_putliteral(l,s,t) (link_putlstring(l,s "",((sizeof(s))-1),t))
00151
00160 int link_putfstring( struct link *link, const char *fmt, time_t stoptime, ... );
00161
00170 int link_putvfstring( struct link *link, const char *fmt, time_t stoptime, va_list va );
00171
00179 int link_usleep( struct link *link, int usec, int reading, int writing );
00180
00184 void link_close( struct link *link );
00185
00197 void link_window_set( int send_window, int recv_window );
00198
00205 void link_window_get( struct link *link, int *send_window, int *recv_window );
00206
00218 int link_readline( struct link *link, char *line, size_t length, time_t stoptime );
00219
00224 int link_fd( struct link *link );
00225
00226 int link_nonblocking( struct link *link, int onoff );
00227
00234 int link_address_local( struct link *link, char *addr, int *port );
00235
00242 int link_address_remote( struct link *link, char *addr, int *port );
00243
00244 INT64_T link_stream_to_buffer( struct link *link, char **buffer, time_t stoptime );
00245
00246 INT64_T link_stream_to_fd( struct link *link, int fd, INT64_T length, time_t stoptime );
00247 INT64_T link_stream_to_file( struct link *link, FILE *file, INT64_T length, time_t stoptime );
00248
00249 INT64_T link_stream_from_fd( struct link *link, int fd, INT64_T length, time_t stoptime );
00250 INT64_T link_stream_from_file( struct link *link, FILE *file, INT64_T length, time_t stoptime );
00251
00252 INT64_T link_soak( struct link *link, INT64_T length, time_t stoptime );
00253
00255 typedef enum {
00256 LINK_TUNE_INTERACTIVE,
00257 LINK_TUNE_BULK
00258 } link_tune_t;
00259
00266 int link_tune( struct link *link, link_tune_t mode );
00267
00269 #define LINK_READ 1
00270
00272 #define LINK_WRITE 2
00273
00275 struct link_info {
00276 struct link *link;
00277 int events;
00278 int revents;
00279 };
00280
00289 int link_poll( struct link_info *array, int nlinks, int msec );
00290
00291 #endif
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304