BitTorrent協議分析六__BitTorrent協議

來源:互聯網
上載者:User

u l int process_handshake_msg(Peer *peer,unsigned char *buff,int len)

功能:處理接收到的一條握手訊息。

參數:從peer接收到這條握手訊息;buff指向握手訊息;len為buff的長度。函數實現的代碼如下:

int process_handshake_msg(Peer *peer,unsigned char *buff,int len)

{

     if(peer==NULL || buff==NULL) return -1;

     if(memcmp(info_hash,buff+28,20) != 0) {  // 若info_hash不一致則關閉串連

          peer->state = CLOSING;

          // 丟棄發送緩衝區中的資料

          discard_send_buffer(peer);

          clear_btcache_before_peer_close(peer);

          close(peer->socket);

          return -1;

     }

     // 儲存該peer的peer_id

     memcpy(peer->id,buff+48,20);

     (peer->id)[20] = '\0';

     // 若當前處於Initial狀態,則發送握手訊息給peer

     if(peer->state == INITIAL) {

          create_handshake_msg(info_hash,peer_id,peer);

          peer->state = HANDSHAKED;

     }

     // 若握手訊息已發送,則狀態轉換為已握手狀態

     if(peer->state == HALFSHAKED)  peer->state = HANDSHAKED;

     // 記錄最近收到該peer訊息的時間

// 若一定時間內(如兩分鐘)未收到來自該peer的任何訊息,則關閉串連

     peer->start_timestamp = time(NULL);

     return 0;

}

u l int process_keep_alive_msg(Peer *peer,unsigned char *buff,int len)

功能:處理剛剛接收到的來自peer的keepv_alive訊息。函數實現的代碼如下:

int process_keep_alive_msg(Peer *peer,unsigned char *buff,int len)

{

     if(peer==NULL || buff==NULL)  return -1;

     // 記錄最近收到該peer訊息的時間

// 若一定時間內(如2min)未收到來自該peer的任何訊息,則關閉串連

     peer->start_timestamp = time(NULL);

     return 0;

}

u l int process_choke_msg(Peer *peer,unsigned char *buff,int len)

功能:處理收到的choke訊息。函數實現的代碼如下:

int process_choke_msg(Peer *peer,unsigned char *buff,int len)

{

     if(peer==NULL || buff==NULL)  return -1;

// 若原先處於unchoke狀態,收到該訊息後更新peer中某些變數的值

     if( peer->state!=CLOSING && peer->peer_choking==0 ) {

          peer->peer_choking = 1;

          peer->last_down_timestamp = 0;      // 將最近接收到來自該peer資料的時間清零

          peer->down_count = 0;      // 將最近從該peer處下載的位元組數清零

          peer->down_rate = 0;       // 將最近從該peer下載資料的速度清零

     }

    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.