A clone of btpd with my configuration changes.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

108 lignes
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