Viewing file: client.h (5 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* +----------------------------------------------------------------------+ | Swoole | +----------------------------------------------------------------------+ | This source file is subject to version 2.0 of the Apache license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.apache.org/licenses/LICENSE-2.0.html | | If you did not receive a copy of the Apache2.0 license and are unable| | to obtain it through the world-wide-web, please send a note to | | license@swoole.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Tianfeng Han <mikan.tenny@gmail.com> | +----------------------------------------------------------------------+ */
#ifndef SW_CLIENT_H_ #define SW_CLIENT_H_
SW_EXTERN_C_BEGIN
#include "buffer.h" #include "connection.h"
#define SW_SOCK_ASYNC 1 #define SW_SOCK_SYNC 0
#define SW_HTTPS_PROXY_HANDSHAKE_RESPONSE "HTTP/1.1 200 Connection established"
enum swClient_pipe_flag { SW_CLIENT_PIPE_TCP_SESSION = 1, };
enum swHttp_proxy_state { SW_HTTP_PROXY_STATE_WAIT = 0, SW_HTTP_PROXY_STATE_HANDSHAKE, SW_HTTP_PROXY_STATE_READY, };
struct _http_proxy { uint8_t state; uint8_t dont_handshake; int proxy_port; const char *proxy_host; const char *user; const char *password; int l_user; int l_password; const char *target_host; int l_target_host; int target_port; char buf[512]; };
typedef struct _swClient { int id; int type; long timeout_id; //timeout node id int _sock_type; int _sock_domain; int _protocol; int reactor_fdtype;
uint32_t active :1; uint32_t async :1; uint32_t keep :1; uint32_t destroyed :1; uint32_t http2 :1; uint32_t sleep :1; uint32_t wait_dns :1; uint32_t shutdow_rw :1; uint32_t shutdown_read :1; uint32_t shutdown_write :1; uint32_t remove_delay :1; uint32_t closed :1; uint32_t high_watermark :1;
/** * one package: length check */ uint32_t open_length_check :1; uint32_t open_eof_check :1;
swProtocol protocol; struct _swSocks5 *socks5_proxy; struct _http_proxy* http_proxy;
uint32_t reuse_count;
const char *server_str; const char *server_host; int server_port; void *ptr; void *params;
uint8_t server_strlen; double timeout; swTimer_node *timer;
/** * signal interruption */ double interrupt_time;
/** * sendto, read only. */ swSocketAddress server_addr;
/** * recvfrom */ swSocketAddress remote_addr;
swSocket *socket;
void *object;
swString *buffer; uint32_t wait_length; uint32_t buffer_input_size;
uint32_t buffer_high_watermark; uint32_t buffer_low_watermark;
#ifdef SW_USE_OPENSSL uint8_t open_ssl :1; uint8_t ssl_wait_handshake :1; SSL_CTX *ssl_context; swSSL_option ssl_option; #endif
void (*onConnect)(struct _swClient *cli); void (*onError)(struct _swClient *cli); void (*onReceive)(struct _swClient *cli, char *data, uint32_t length); void (*onClose)(struct _swClient *cli); void (*onBufferFull)(struct _swClient *cli); void (*onBufferEmpty)(struct _swClient *cli);
int (*connect)(struct _swClient *cli, const char *host, int port, double _timeout, int sock_flag); int (*send)(struct _swClient *cli, const char *data, int length, int flags); int (*sendfile)(struct _swClient *cli, const char *filename, off_t offset, size_t length); int (*recv)(struct _swClient *cli, char *data, int len, int flags); int (*close)(struct _swClient *cli);
} swClient;
void swClient_init_reactor(swReactor *reactor); int swClient_create(swClient *cli, int type, int async); int swClient_sleep(swClient *cli); int swClient_wakeup(swClient *cli); int swClient_shutdown(swClient *cli, int __how); #ifdef SW_USE_OPENSSL int swClient_enable_ssl_encrypt(swClient *cli); int swClient_ssl_handshake(swClient *cli); int swClient_ssl_verify(swClient *cli, int allow_self_signed); #endif void swClient_free(swClient *cli); //----------------------------------------Stream--------------------------------------- typedef struct _swStream { swString *buffer; uint8_t cancel; void *private_data; void (*response)(struct _swStream *stream, char *data, uint32_t length); swClient client; } swStream;
swStream* swStream_new(char *dst_host, int dst_port, int type); int swStream_send(swStream *stream, char *data, size_t length); void swStream_set_protocol(swProtocol *protocol); void swStream_set_max_length(swStream *stream, uint32_t max_length); int swStream_recv_blocking(int fd, void *__buf, size_t __len); //----------------------------------------Stream End------------------------------------
SW_EXTERN_C_END
#endif /* SW_CLIENT_H_ */
|