123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #ifndef _CONNECTION_H_
- #define _CONNECTION_H_
- #include "netinc.h"
- #include "asyncdns.h"
- #include "../nu/RingBuffer.h"
- #include "jnetlib_defines.h"
- #include <stddef.h>
- #include "nswasabi/ReferenceCounted.h"
- #if defined(_MSC_VER) && (_MSC_VER < 1200)
- typedef int intptr_t;
- #endif
- #define PACKET_SIZE 16384
- class JNL_Connection : private Filler, private Drainer, public ReferenceCountedBase<JNL_Connection>
- {
- public:
- typedef enum
- {
- STATE_ERROR = JNL_CONNECTION_STATE_ERROR,
- STATE_NOCONNECTION = JNL_CONNECTION_STATE_NOCONNECTION,
- STATE_RESOLVING = JNL_CONNECTION_STATE_RESOLVING,
- STATE_CONNECTING = JNL_CONNECTION_STATE_CONNECTING,
- STATE_CONNECTED = JNL_CONNECTION_STATE_CONNECTED,
- STATE_CLOSING = JNL_CONNECTION_STATE_CLOSING,
- STATE_CLOSED = JNL_CONNECTION_STATE_CLOSED,
- STATE_RESOLVED = JNL_CONNECTION_STATE_RESOLVED,
- } state;
-
- JNL_Connection();
- JNL_Connection(JNL_AsyncDNS *dns, size_t sendbufsize, size_t recvbufsize);
- virtual ~JNL_Connection();
- void open( JNL_AsyncDNS *dns = JNL_AUTODNS, size_t sendbufsize = 8192, size_t recvbufsize = 8192 );
- void connect( const char *hostname, int port );
- virtual void connect( SOCKET sock, sockaddr *addr, socklen_t length );
- int set_recv_buffer_size(size_t new_buffer_size);
-
- virtual void run( size_t max_send_bytes = -1, size_t max_recv_bytes = -1, size_t *bytes_sent = NULL, size_t *bytes_rcvd = NULL );
- int get_state() { return m_state; }
- char *get_errstr() { return m_errorstr; }
- void close( int quick = 0 );
- void flush_send( void ) { send_buffer.clear(); }
- size_t send_bytes_in_queue( void );
- size_t send_bytes_available( void );
- int send( const void *data, size_t length );
- inline int send_bytes( const void *data, size_t length ) { return send( data, length ); }
- int send_string( const char *line );
- size_t recv_bytes_available( void );
- size_t recv_bytes( void *data, size_t maxlength );
- unsigned int recv_int( void );
- int recv_lines_available( void );
- int recv_line( char *line, size_t maxlength );
-
-
-
- size_t peek_bytes( void *data, size_t maxlength );
- unsigned long get_interface( void );
- unsigned long get_remote( void );
- unsigned short get_remote_port( void );
- void set_dns( JNL_AsyncDNS *dns );
- void reuse();
- protected:
- SOCKET m_socket;
- unsigned short m_remote_port;
- RingBuffer recv_buffer;
- RingBuffer send_buffer;
- addrinfo *saddr;
- sockaddr *address;
- char m_host[256];
- JNL_AsyncDNS *m_dns;
- bool m_dns_owned;
- state m_state;
- char *m_errorstr;
-
- virtual void socket_shutdown();
- virtual ssize_t socket_recv( char *buf, size_t len, int options );
- virtual ssize_t socket_send( const char *buf, size_t len, int options );
- virtual int socket_connect();
- virtual void on_socket_connected();
- private:
- void init();
-
- size_t Read( void *dest, size_t len ) override;
- size_t Write( const void *dest, size_t len ) override;
- };
- #endif
|