00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef VFER_API_H
00023 #define VFER_API_H
00024
00025
00026
00027
00028
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <unistd.h>
00032 #include <sys/types.h>
00033 #include <sys/socket.h>
00034 #include <sys/un.h>
00035 #include <string.h>
00036 #include <netinet/in.h>
00037 #include <arpa/inet.h>
00038 #include <pthread.h>
00039 #include <signal.h>
00040 #include <sys/select.h>
00041 #include <stdbool.h>
00042
00043 #include "vfer.h"
00044 #include "vfer_packet.h"
00045 #include "vfer_control.h"
00046
00047
00048 #ifdef IP_DONTFRAG
00049 #define SET_DF_BIT(SOCKFD, RET){\
00050 RET = setsockopt(SOCKFD, IPPROTO_IP, IP_DONTFRAG, NULL, 0);}
00051 #else
00052 #ifdef IP_PMTUDISC_DO
00053 #define SET_DF_BIT(SOCKFD, RET){\
00054 int dfval = IP_PMTUDISC_DO;\
00055 RET = setsockopt(SOCKFD, SOL_IP, IP_MTU_DISCOVER, &dfval, sizeof(int));}
00056 #else
00057 #define SET_DF_BIT(SOCKFD, RET){ RET = -1; }
00058 #endif
00059 #endif
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 typedef void* vfer_trnsm_arg;
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 typedef int (*vfer_trnsm_fn)(vfer_trnsm_arg sock, void* buf, size_t len);
00082
00083
00084
00085
00086
00087
00088
00089 vfer_fd vfer_socket (int socktype);
00090 int vfer_close (vfer_fd vfd);
00091 int vfer_connect (vfer_fd vfd, const struct sockaddr *serv_addr, int addrlen);
00092 int vfer_bind (vfer_fd vfd, struct sockaddr *addr, int len);
00093 int vfer_listen (vfer_fd vfd, int backlog);
00094 vfer_fd vfer_accept (vfer_fd vfd, struct sockaddr *addr, socklen_t *len);
00095
00096
00097
00098 int vfer_setsockopt (vfer_fd vfd, int optname, void *optval, int optlen);
00099 int vfer_getsockopt (vfer_fd vfd, int optname, void *optval, int *optlen);
00100
00101
00102 int vfer_send (vfer_fd vfd, const void * buf, size_t len);
00103 int vfer_recv (vfer_fd vfd, void *buf, size_t len);
00104 int vfer__sendfile (vfer_trnsm_fn fn, vfer_trnsm_arg arg, int frame_size,
00105 int fd, off_t offset, size_t size);
00106 int vfer__recvfile (vfer_trnsm_fn fn, vfer_trnsm_arg arg, uint32_t frame_size,
00107 int fd, off_t offset, size_t size);
00108 int vfer_sendfile (vfer_fd vfd, int fd, off_t offset, size_t size);
00109 int vfer_recvfile (vfer_fd vfd, int fd, off_t offset, size_t size);
00110
00111
00112 int vfer_selectmark (vfer_fd vfd, int mark);
00113 int vfer_selecttest (vfer_fd vfd);
00114 int vfer_select (int len, vfer_fd *vfds, struct timeval *timeout);
00115
00116
00117 vfer_stats vfer_sockstats (vfer_fd vfd);
00118 int vfer_debug (FILE* debug_file, FILE* error_file, const char* layers);
00119 int vfer_sockerror (vfer_fd vfd);
00120 char* vfer_errortext (int err);
00121 int vfer_getsockname(vfer_fd vfd, struct sockaddr *name, socklen_t* len);
00122 bool vfer_is_stream (vfer_fd fd);
00123 ssize_t vfer_max_frame_size (vfer_fd fd);
00124
00125
00126 #endif