tSetup callback functions for received messages - libeech - bittorrent library
 (HTM) git clone git://z3bra.org/libeech.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit cdd7c5d525296210093f84fc0407f6bb0012a7c3
 (DIR) parent 4d12ab42b1daabd2261e55ef66ca8d6f42d206a1
 (HTM) Author: z3bra <contactatz3bradotorg>
       Date:   Sun,  1 Jul 2018 12:54:45 +0200
       
       Setup callback functions for received messages
       
       Diffstat:
         M libeech.c                           |      86 +++++++++++++++++++++++++------
       
       1 file changed, 70 insertions(+), 16 deletions(-)
       ---
 (DIR) diff --git a/libeech.c b/libeech.c
       t@@ -69,6 +69,14 @@ static ssize_t pwpst(struct peer *, int);
        static ssize_t pwpbf(struct torrent *, struct peer *);
        static ssize_t pwprq(struct torrent *, struct peer *);
        
       +static int pwprxst(struct peer *, int);
       +static int pwprxhv(struct peer *, size_t, char *);
       +static int pwprxbf(struct peer *, size_t, char *);
       +static int pwprxrq(struct torrent *, struct peer *, size_t, char *);
       +static int pwprxpc(struct torrent *, struct peer *, size_t, char *);
       +
       +static int pwprxcb(struct torrent *, struct peer *, int, size_t, char *);
       +
        static int pwptx(struct torrent *, struct peer *);
        static int pwprx(struct torrent *, struct peer *);
        
       t@@ -509,6 +517,64 @@ pwprq(struct torrent *t, struct peer *p)
        }
        
        static int
       +pwprxst(struct peer *p, int type)
       +{
       +        return 0;
       +}
       +
       +static int
       +pwprxhv(struct peer *p, size_t sz, char *pl)
       +{
       +        return 0;
       +}
       +
       +static int
       +pwprxbf(struct peer *p, size_t sz, char *pl)
       +{
       +        return 0;
       +}
       +
       +static int
       +pwprxrq(struct torrent *t, struct peer *p, size_t sz, char *pl)
       +{
       +        return 0;
       +}
       +
       +static int
       +pwprxpc(struct torrent *t, struct peer *p, size_t sz, char *pl)
       +{
       +        return 0;
       +}
       +
       +static int
       +pwprxcb(struct torrent *t, struct peer *p, int type, size_t sz, char *pl)
       +{
       +        switch (type) {
       +                case CHOKE:
       +                case UNCHOKE:
       +                case INTERESTED:
       +                case UNINTERESTED:
       +                        pwprxst(p, type);
       +                        break;
       +                case HAVE:
       +                        break;
       +                case BITFIELD:
       +                        pwprxbf(p, sz, pl);
       +                        break;
       +                case REQUEST:
       +                        pwprxrq(t, p, sz, pl);
       +                        break;
       +                case PIECE:
       +                        pwprxpc(t, p, sz, pl);
       +                        break;
       +                case CANCEL:
       +                        /* not handled */
       +                        break;
       +        }
       +        return 0;
       +}
       +
       +static int
        pwptx(struct torrent *t, struct peer *p)
        {
                /* send handshake */
       t@@ -541,22 +607,10 @@ pwprx(struct torrent *t, struct peer *p)
                        }
                        p->rxbufsz = 0;
                        p->state |= HANDSHAKERCVD;
       -        } else {
       -                if (!pwprecv(p)) {
       -                        switch (p->rxbuf[4]) {
       -                        case 0:
       -                                p->state |= AMCHOKING;
       -                                break;
       -                        case 1:
       -                                p->state &= ~(AMCHOKING);
       -                                break;
       -                        case 5:
       -                                memcpy(p->bf, p->rxbuf+4, p->rxbufsz - 5);
       -                                break;
       -                        }
       -                        p->rxbufsz = 0;
       -                        memset(p->rxbuf, 0, MSGSIZ);
       -                }
       +        } else if (!pwprecv(p)) {
       +                pwprxcb(t, p, p->rxbuf[4], p->rxbufsz- 5, p->rxbuf+4);
       +                memset(p->rxbuf, 0, MSGSIZ);
       +                p->rxbufsz = 0;
                }
        
                return 0;