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.

65 lines
1.4 KiB

12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
  1. #ifndef _LOCAL_H
  2. #define _LOCAL_H
  3. #include <ev.h>
  4. #include "encrypt.h"
  5. #include "jconf.h"
  6. struct listen_ctx {
  7. ev_io io;
  8. char **remote_host;
  9. int remote_num;
  10. char *remote_port;
  11. int timeout;
  12. int fd;
  13. struct sockaddr sock;
  14. };
  15. struct server_ctx {
  16. ev_io io;
  17. int connected;
  18. struct server *server;
  19. };
  20. struct server {
  21. int fd;
  22. char buf[BUF_SIZE]; // server send from, remote recv into
  23. char stage;
  24. int buf_len;
  25. struct rc4_state *e_ctx;
  26. struct rc4_state *d_ctx;
  27. struct server_ctx *recv_ctx;
  28. struct server_ctx *send_ctx;
  29. struct remote *remote;
  30. };
  31. struct remote_ctx {
  32. ev_io io;
  33. ev_timer watcher;
  34. int connected;
  35. struct remote *remote;
  36. };
  37. struct remote {
  38. int fd;
  39. char buf[BUF_SIZE]; // remote send from, server recv into
  40. int buf_len;
  41. struct remote_ctx *recv_ctx;
  42. struct remote_ctx *send_ctx;
  43. struct server *server;
  44. };
  45. static void accept_cb (EV_P_ ev_io *w, int revents);
  46. static void server_recv_cb (EV_P_ ev_io *w, int revents);
  47. static void server_send_cb (EV_P_ ev_io *w, int revents);
  48. static void remote_recv_cb (EV_P_ ev_io *w, int revents);
  49. static void remote_send_cb (EV_P_ ev_io *w, int revents);
  50. struct remote* new_remote(int fd, int timeout);
  51. void free_remote(struct remote *remote);
  52. void close_and_free_remote(EV_P_ struct remote *remote);
  53. struct server* new_server(int fd);
  54. void free_server(struct server *server);
  55. void close_and_free_server(EV_P_ struct server *server);
  56. #endif // _LOCAL_H