A clone of btpd with my configuration changes.
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

108 рядки
2.2 KiB

  1. #ifndef BTPD_NET_H
  2. #define BTPD_NET_H
  3. #define MSG_CHOKE 0
  4. #define MSG_UNCHOKE 1
  5. #define MSG_INTEREST 2
  6. #define MSG_UNINTEREST 3
  7. #define MSG_HAVE 4
  8. #define MSG_BITFIELD 5
  9. #define MSG_REQUEST 6
  10. #define MSG_PIECE 7
  11. #define MSG_CANCEL 8
  12. struct bwlim {
  13. unsigned long count;
  14. struct event timer;
  15. BTPDQ_ENTRY(bwlim) entry;
  16. };
  17. BTPDQ_HEAD(bwlim_tq, bwlim);
  18. struct iob_link {
  19. int upload;
  20. BTPDQ_ENTRY(iob_link) entry;
  21. void (*kill_buf)(struct io_buffer *);
  22. struct io_buffer iob;
  23. };
  24. BTPDQ_HEAD(io_tq, iob_link);
  25. struct peer;
  26. struct input_reader {
  27. unsigned long (*read)(struct peer *, unsigned long);
  28. void (*kill)(struct input_reader *);
  29. };
  30. struct bitfield_reader {
  31. struct input_reader rd;
  32. struct io_buffer iob;
  33. };
  34. struct piece_reader {
  35. struct input_reader rd;
  36. struct io_buffer iob;
  37. uint32_t index;
  38. uint32_t begin;
  39. };
  40. #define SHAKE_LEN 68
  41. enum shake_state {
  42. SHAKE_INIT,
  43. SHAKE_PSTR,
  44. SHAKE_RESERVED,
  45. SHAKE_INFO,
  46. SHAKE_ID
  47. };
  48. struct handshake {
  49. struct input_reader rd;
  50. enum shake_state state;
  51. int incoming;
  52. struct io_buffer in;
  53. char _io_buf[SHAKE_LEN];
  54. };
  55. #define MAX_INPUT_LEFT 16
  56. struct generic_reader {
  57. struct input_reader rd;
  58. struct io_buffer iob;
  59. char _io_buf[MAX_INPUT_LEFT];
  60. };
  61. struct piece_req {
  62. uint32_t index, begin, length;
  63. struct iob_link *head; /* Pointer to outgoing piece. */
  64. BTPDQ_ENTRY(piece_req) entry;
  65. };
  66. BTPDQ_HEAD(piece_req_tq, piece_req);
  67. void net_connection_cb(int sd, short type, void *arg);
  68. void net_by_second(void);
  69. struct peer;
  70. void net_send_uninterest(struct peer *p);
  71. void net_send_interest(struct peer *p);
  72. void net_send_unchoke(struct peer *p);
  73. void net_send_choke(struct peer *p);
  74. void net_send_have(struct peer *p, uint32_t index);
  75. void net_send_request(struct peer *p, struct piece_req *req);
  76. void net_send_cancel(struct peer *p, struct piece_req *req);
  77. void net_handshake(struct peer *p, int incoming);
  78. void net_read_cb(int sd, short type, void *arg);
  79. void net_write_cb(int sd, short type, void *arg);
  80. int net_connect2(struct sockaddr *sa, socklen_t salen, int *sd);
  81. int net_connect(const char *ip, int port, int *sd);
  82. void net_unsend_piece(struct peer *p, struct piece_req *req);
  83. #endif