Mercurial > hg > nnchat
view libnnchat.h @ 400:ec974049ccba
Reindent.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 24 May 2012 05:01:46 +0300 |
parents | 07a46ca075ab |
children |
line wrap: on
line source
/* * NNChat - Custom chat client for NewbieNudes.com chatrooms * Written by Matti 'ccr' Hämäläinen * (C) Copyright 2008-2012 Tecnic Software productions (TNSP) */ #ifndef LIBNNCHAT_H #define LIBNNCHAT_H #include <stdio.h> #include <unistd.h> #include "th_types.h" #ifdef __WIN32 #include <windows.h> #include <winsock.h> typedef uint16_t in_port_t; typedef uint32_t in_addr_t; #else #include <sys/select.h> #include <sys/socket.h> #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #include <arpa/inet.h> #include <netdb.h> #endif #include <sys/types.h> #include <time.h> #include <errno.h> #include "th_string.h" #define NN_TMPBUF_SIZE (4096) #define NN_ALLOC_SIZE (128) #define NN_CONNBUF_SIZE (64 * 1024) #define NN_NUM_BUCKETS (256) #define NN_DELAY_USEC (15 * 1000) #define NN_BACKBUF_LEN (512) /* Backbuffer size (in lines) */ enum { NN_CONN_UNINIT = 0, NN_CONN_PROXY_NEG, NN_CONN_OPEN, NN_CONN_CLOSED }; enum { NN_PROXY_NONE = 0, NN_PROXY_SOCKS4, NN_PROXY_SOCKS4A, NN_PROXY_LAST }; enum { SOCKS_CMD_CONNECT = 1, SOCKS_CMD_BIND = 2 }; struct nn_socks_t { uint8_t version; uint8_t command; in_port_t port; in_addr_t addr; } __attribute__((__packed__)); struct nn_socks_res_t { uint8_t nb; uint8_t result; in_port_t port; in_addr_t addr; } __attribute__((__packed__)); typedef struct _nn_conn_t { struct { char *host; struct hostent *hst; int type; int port; struct in_addr addr; } proxy; char *host; struct hostent *hst; int port; int socket; struct in_addr addr; fd_set sockfds; void (*errfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); void (*msgfunc)(struct _nn_conn_t *conn, const char *fmt, va_list ap); int err; int status; char buf[NN_CONNBUF_SIZE + 16]; char *ptr, *in_ptr; ssize_t got_bytes, total_bytes; } nn_conn_t; const char *nn_get_errstr(int err); BOOL nn_network_init(); void nn_network_close(void); struct hostent *nn_resolve_host(nn_conn_t *conn, const char *name); nn_conn_t * nn_conn_new( void (*errfunc)(nn_conn_t *conn, const char *fmt, va_list ap), void (*msgfunc)(nn_conn_t *conn, const char *fmt, va_list ap)); int nn_conn_set_proxy(nn_conn_t *conn, int type, int port, const char *host); int nn_conn_open(nn_conn_t *conn, const int port, const char *host); void nn_conn_close(nn_conn_t *); void nn_conn_reset(nn_conn_t *); int nn_conn_pull(nn_conn_t *); BOOL nn_conn_send_buf(nn_conn_t *, const char *buf, const size_t len); BOOL nn_conn_send_msg(nn_conn_t *, const char *user, const char *fmt, ...); BOOL nn_conn_check(nn_conn_t *); BOOL nn_conn_buf_check(nn_conn_t *conn, size_t n); BOOL nn_conn_buf_skip(nn_conn_t *conn, size_t n); int nn_conn_buf_strncmp(nn_conn_t *conn, const char *str, const size_t n); int nn_conn_buf_strcmp(nn_conn_t *conn, const char *str); char * nn_conn_buf_strstr(nn_conn_t *conn, const char *str); typedef struct _nn_user_t { char *name; time_t lastspoke, joined; struct _nn_user_t *next; } nn_user_t; typedef struct { nn_user_t *buckets[NN_NUM_BUCKETS]; } nn_userhash_t; nn_userhash_t *nn_userhash_new(void); nn_user_t * nn_userhash_foreach(const nn_userhash_t *, int (*func)(const nn_user_t *)); nn_user_t * nn_user_match(const nn_userhash_t *list, const char *str, const char *current, BOOL again); int nn_userhash_insert(nn_userhash_t *, const char *name); int nn_userhash_delete(nn_userhash_t *, const char *name); void nn_userhash_free(nn_userhash_t *); void nn_user_free(nn_user_t *); void nn_user_free_list(nn_user_t *); nn_user_t * nn_user_copy(const nn_user_t *src); nn_user_t * nn_user_find(const nn_userhash_t *list, const char *name); char * nn_encode_str1(const char *str); char * nn_decode_str1(const char *str); char * nn_encode_str2(const char *str); char * nn_decode_str2(const char *str); char * nn_strip_tags(const char *str); char * nn_dbldecode_str(const char *str); char * nn_dblencode_str(const char *str); char * nn_username_encode(char *str); char * nn_username_decode(char *str); typedef struct { ssize_t pos, len, size; char *data; } nn_editbuf_t; int nn_editbuf_write(nn_editbuf_t *buf, ssize_t pos, int ch); int nn_editbuf_insert(nn_editbuf_t *buf, ssize_t pos, int ch); int nn_editbuf_delete(nn_editbuf_t *buf, ssize_t pos); void nn_editbuf_clear(nn_editbuf_t *buf); nn_editbuf_t * nn_editbuf_new(ssize_t n); void nn_editbuf_free(nn_editbuf_t *buf); nn_editbuf_t * nn_editbuf_copy(nn_editbuf_t *src); void nn_editbuf_setpos(nn_editbuf_t *buf, ssize_t pos); char * nn_editbuf_get_string(nn_editbuf_t *buf, ssize_t start, ssize_t end); typedef struct { qringbuf_t *data; /* "Backbuffer" data for this window */ int pos; /* Current position in the window, 0 = real time */ BOOL dirty; char *id; /* Chatter ID, NULL = main window */ int num; /* Window number */ char *buf; size_t len, bufsize; size_t chlen; } nn_window_t; nn_window_t *nn_window_new(const char *); void nn_window_free(nn_window_t *); typedef struct { size_t len; char *str; } nn_strtuple_t; nn_strtuple_t *nn_strtuple_new(size_t, char *); void nn_strtuple_free(nn_strtuple_t *); #endif