//Peer_id 为返回对方peer_id; bool parse_handshake_info(const t_byte* pbuf, Sha1Hash &info_hash, PeerID &peer_id, t_byte ext_info[8]) { assert(pbuf != 0); if(pbuf[0] != PROTOCOL_LENGTH) { DEBUG_PRINT0("invalid protocol length\n"); return false; } //DEBUG_PRINT1("%s\n", (const char*)&pbuf[1]); if(memcmp(&pbuf[1], PROTOCOL_STRING, PROTOCOL_LENGTH) == 0) { //DEBUG_PRINT0("invalid protocol string\n"); memcpy(ext_info, &pbuf[20], 8); info_hash.Reset(&pbuf[28]); peer_id.Reset(&pbuf[48]); return true; }else { DEBUG_PRINT0("invalid protocol string\n"); return false; } }