You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.8 KiB

11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
  1. #ifndef _SERVER_H
  2. #define _SERVER_H
  3. #include <ev.h>
  4. #include <time.h>
  5. #include "encrypt.h"
  6. #include "jconf.h"
  7. #include "asyncns.h"
  8. #include "include.h"
  9. struct listen_ctx
  10. {
  11. ev_io io;
  12. int fd;
  13. int timeout;
  14. int method;
  15. char *iface;
  16. asyncns_t *asyncns;
  17. struct sockaddr sock;
  18. };
  19. struct server_ctx
  20. {
  21. ev_io io;
  22. ev_timer watcher;
  23. int connected;
  24. struct server *server;
  25. };
  26. struct server
  27. {
  28. int fd;
  29. int buf_len;
  30. int buf_idx;
  31. char *buf; // server send from, remote recv into
  32. char stage;
  33. struct enc_ctx *e_ctx;
  34. struct enc_ctx *d_ctx;
  35. struct server_ctx *recv_ctx;
  36. struct server_ctx *send_ctx;
  37. struct listen_ctx *listen_ctx;
  38. asyncns_query_t *query;
  39. struct remote *remote;
  40. };
  41. struct remote_ctx
  42. {
  43. ev_io io;
  44. int connected;
  45. struct remote *remote;
  46. };
  47. struct remote
  48. {
  49. int fd;
  50. int buf_len;
  51. int buf_idx;
  52. char *buf; // remote send from, server recv into
  53. struct remote_ctx *recv_ctx;
  54. struct remote_ctx *send_ctx;
  55. struct server *server;
  56. };
  57. static void accept_cb (EV_P_ ev_io *w, int revents);
  58. static void server_recv_cb (EV_P_ ev_io *w, int revents);
  59. static void server_send_cb (EV_P_ ev_io *w, int revents);
  60. static void remote_recv_cb (EV_P_ ev_io *w, int revents);
  61. static void remote_send_cb (EV_P_ ev_io *w, int revents);
  62. static void server_timeout_cb(EV_P_ ev_timer *watcher, int revents);
  63. static void server_resolve_cb(EV_P_ ev_timer *watcher, int revents);
  64. struct remote* new_remote(int fd);
  65. struct remote *connect_to_remote(struct addrinfo *res, const char *iface);
  66. void free_remote(struct remote *remote);
  67. void close_and_free_remote(EV_P_ struct remote *remote);
  68. struct server* new_server(int fd, struct listen_ctx *listener);
  69. void free_server(struct server *server);
  70. void close_and_free_server(EV_P_ struct server *server);
  71. #endif // _SERVER_H