about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--btpd/net.c15
-rw-r--r--btpd/peer.c16
-rw-r--r--btpd/peer.h1
3 files changed, 19 insertions, 13 deletions
diff --git a/btpd/net.c b/btpd/net.c
index d0db03a..9958a3e 100644
--- a/btpd/net.c
+++ b/btpd/net.c
@@ -239,17 +239,7 @@ net_state(struct peer *p, const char *buf)
              || bcmp(buf, btpd.peer_id, 20) == 0))
 	    goto bad;
 	bcopy(buf, p->id, 20);
-	btpd_log(BTPD_L_CONN, "Got whole shake.\n");
-	p->piece_field = btpd_calloc(1, (int)ceil(p->tp->meta.npieces / 8.0));
-	if (p->tp->have_npieces > 0) {
-	    if (p->tp->have_npieces * 9 < 5 + ceil(p->tp->meta.npieces / 8.0))
-		peer_send(p, nb_create_multihave(p->tp));
-	    else {
-		peer_send(p, nb_create_bitfield(p->tp));
-		peer_send(p, nb_create_bitdata(p->tp));
-	    }
-	}
-	cm_on_new_peer(p);
+        peer_on_shake(p);
 	net_set_state(p, NET_MSGSIZE, 4);
         break;
     case NET_MSGSIZE:
@@ -265,9 +255,8 @@ net_state(struct peer *p, const char *buf)
 	    if (net_dispatch_msg(p, buf) != 0)
 		goto bad;
 	    net_set_state(p, NET_MSGSIZE, 4);
-	} else {
+	} else
 	    net_set_state(p, NET_MSGBODY, p->net.msg_len - 1);
-	}
         break;
     case NET_MSGBODY:
 	if (net_dispatch_msg(p, buf) != 0)
diff --git a/btpd/peer.c b/btpd/peer.c
index 0576d40..a00569c 100644
--- a/btpd/peer.c
+++ b/btpd/peer.c
@@ -303,6 +303,22 @@ peer_create_out_compact(struct torrent *tp, const char *compact)
 }
 
 void
+peer_on_shake(struct peer *p)
+{
+    btpd_log(BTPD_L_MSG, "received shake from %p.\n", p);
+    p->piece_field = btpd_calloc(1, (int)ceil(p->tp->meta.npieces / 8.0));
+    if (p->tp->have_npieces > 0) {
+        if (p->tp->have_npieces * 9 < 5 + ceil(p->tp->meta.npieces / 8.0))
+            peer_send(p, nb_create_multihave(p->tp));
+        else {
+            peer_send(p, nb_create_bitfield(p->tp));
+            peer_send(p, nb_create_bitdata(p->tp));
+        }
+    }
+    cm_on_new_peer(p);
+}
+
+void
 peer_on_choke(struct peer *p)
 {
     btpd_log(BTPD_L_MSG, "received choke from %p\n", p);
diff --git a/btpd/peer.h b/btpd/peer.h
index 84ef02b..4bf046b 100644
--- a/btpd/peer.h
+++ b/btpd/peer.h
@@ -88,6 +88,7 @@ void peer_create_out(struct torrent *tp, const uint8_t *id,
 void peer_create_out_compact(struct torrent *tp, const char *compact);
 void peer_kill(struct peer *p);
 
+void peer_on_shake(struct peer *p);
 void peer_on_interest(struct peer *p);
 void peer_on_uninterest(struct peer *p);
 void peer_on_choke(struct peer *p);