aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/protocols/bittorrent.c62
1 files changed, 34 insertions, 28 deletions
diff --git a/src/lib/protocols/bittorrent.c b/src/lib/protocols/bittorrent.c
index 9617230cc..2eb34ca8e 100644
--- a/src/lib/protocols/bittorrent.c
+++ b/src/lib/protocols/bittorrent.c
@@ -84,22 +84,26 @@ static void ndpi_add_connection_as_bittorrent(struct ndpi_detection_module_struc
ndpi_int_change_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_UNKNOWN);
- if(packet->udp) {
- if(ndpi_struct->bittorrent_cache == NULL)
- ndpi_struct->bittorrent_cache = ndpi_lru_cache_init(1024);
+ if(ndpi_struct->bittorrent_cache == NULL)
+ ndpi_struct->bittorrent_cache = ndpi_lru_cache_init(1024);
- if(ndpi_struct->bittorrent_cache && packet->iph && packet->udp) {
- u_int32_t key = packet->iph->saddr + packet->udp->source;
+ if(ndpi_struct->bittorrent_cache && packet->iph) {
+ u_int32_t key1, key2;
- ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key, NDPI_PROTOCOL_BITTORRENT);
+ if(packet->udp)
+ key1 = packet->iph->saddr + packet->udp->source, key2 = packet->iph->daddr + packet->udp->dest;
+ else
+ key1 = packet->iph->saddr + packet->tcp->source, key2 = packet->iph->daddr + packet->tcp->dest;
- key = packet->iph->daddr + packet->udp->dest;
- ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key, NDPI_PROTOCOL_BITTORRENT);
+ ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key1, NDPI_PROTOCOL_BITTORRENT);
+ ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key2, NDPI_PROTOCOL_BITTORRENT);
#ifdef CACHE_DEBUG
- printf("[BitTorrent] *** ADDING ports %u / %u\n", ntohs(packet->udp->source), ntohs(packet->udp->dest));
+ if(packet->udp)
+ printf("[BitTorrent] [UDP] *** ADDED ports %u / %u [%u][%u]\n", ntohs(packet->udp->source), ntohs(packet->udp->dest), key1, key2);
+ else
+ printf("[BitTorrent] [TCP] *** ADDED ports %u / %u [%u][%u]\n", ntohs(packet->tcp->source), ntohs(packet->tcp->dest), key1, key2);
#endif
- }
}
}
@@ -427,31 +431,33 @@ void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, st
if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_BITTORRENT) {
/* check for tcp retransmission here */
- if((flow->packet_counter == 0 /* Do the check once */) && ndpi_struct->bittorrent_cache) {
- u_int32_t key = packet->udp ? (packet->iph->saddr + packet->udp->source) : (packet->iph->saddr + packet->tcp->source);
- u_int16_t cached_proto;
- u_int8_t found = 0;
+ if((flow->packet_counter <= 1 /* Do the check once */) && ndpi_struct->bittorrent_cache) {
+ u_int16_t cached_proto;
+ u_int8_t found = 0;
+ u_int32_t key1, key2;
+
+ /* Check cached communications */
+ if(packet->udp)
+ key1 = packet->iph->saddr + packet->udp->source, key2 = packet->iph->daddr + packet->udp->dest;
+ else
+ key1 = packet->iph->saddr + packet->tcp->source, key2 = packet->iph->daddr + packet->tcp->dest;
+
+ found = ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key1, &cached_proto, 0 /* Don't remove it as it can be used for other connections */)
+ || ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key2, &cached_proto, 0 /* Don't remove it as it can be used for other connections */);
#ifdef CACHE_DEBUG
- if(packet->udp)
- printf("[BitTorrent] *** SEARCHING ports %u / %u\n", ntohs(packet->udp->source), ntohs(packet->udp->dest));
- else
- printf("[BitTorrent] *** SEARCHING ports %u / %u\n", ntohs(packet->tcp->source), ntohs(packet->tcp->dest));
+ if(packet->udp)
+ printf("[BitTorrent] *** [UDP] SEARCHING ports %u / %u [%u][%u][found: %u][packet_counter: %u]\n",
+ ntohs(packet->udp->source), ntohs(packet->udp->dest), key1, key2, found, flow->packet_counter);
+ else
+ printf("[BitTorrent] *** [TCP] SEARCHING ports %u / %u [%u][%u][found: %u][packet_counter: %u]\n",
+ ntohs(packet->tcp->source), ntohs(packet->tcp->dest), key1, key2, found, flow->packet_counter);
#endif
-
- if(ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key,
- &cached_proto, 0 /* Don't remove it as it can be used for other connections */))
- found = 1;
- else {
- key = packet->udp ? (packet->iph->daddr + packet->udp->dest) : (packet->iph->daddr + packet->tcp->dest);
-
- found = ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key,
- &cached_proto, 0 /* Don't remove it as it can be used for other connections */);
- }
if(found)
goto bittorrent_found;
}
+
if(packet->tcp != NULL) {
ndpi_int_search_bittorrent_tcp(ndpi_struct, flow);
} else if(packet->udp != NULL) {