Reduce priority of rhizome on MDP, stop sooner when packet queues fill

This commit is contained in:
Jeremy Lakeman 2013-01-28 13:35:24 +11:00
parent fec19eee58
commit 88f7fef992
3 changed files with 13 additions and 2 deletions

View File

@ -109,7 +109,7 @@ int overlay_mdp_service_rhizomerequest(overlay_mdp_frame *mdp)
memset(reply.out.dst.sid,0xff,SID_SIZE);
}
reply.out.dst.port=MDP_PORT_RHIZOME_RESPONSE;
reply.out.queue=OQ_ORDINARY;
reply.out.queue=OQ_OPPORTUNISTIC;
reply.out.payload[0]='B'; // reply contains blocks
// include 16 bytes of BID prefix for identification
bcopy(&mdp->out.payload[0],&reply.out.payload[1],16);
@ -129,6 +129,9 @@ int overlay_mdp_service_rhizomerequest(overlay_mdp_frame *mdp)
if (blockBytes>blockLength) blockBytes=blockLength;
// read data for block
if (blob_bytes>=blockOffset) {
if (overlay_queue_remaining(reply.out.queue) < 10)
break;
sqlite3_blob_read(blob,&reply.out.payload[1+16+8+8],
blockBytes,blockOffset);
reply.out.payload_length=1+16+8+8+blockBytes;
@ -136,7 +139,8 @@ int overlay_mdp_service_rhizomerequest(overlay_mdp_frame *mdp)
// Mark terminal block if required
if (blockOffset+blockBytes==blob_bytes) reply.out.payload[0]='T';
// send packet
overlay_mdp_dispatch(&reply,0 /* system generated */, NULL,0);
if (overlay_mdp_dispatch(&reply,0 /* system generated */, NULL,0))
break;
} else break;
}

View File

@ -125,6 +125,12 @@ overlay_queue_dump(overlay_txqueue *q)
}
#endif
int overlay_queue_remaining(int queue){
if (queue<0 || queue>=OQ_MAX)
return -1;
return overlay_tx[queue].maxLength - overlay_tx[queue].length;
}
int overlay_payload_enqueue(struct overlay_frame *p)
{
/* Add payload p to queue q.

View File

@ -512,6 +512,7 @@ overlay_node *overlay_route_find_node(const unsigned char *sid,int prefixLen,int
int overlayServerMode();
int overlay_payload_enqueue(struct overlay_frame *p);
int overlay_queue_remaining(int queue);
int overlay_route_record_link( time_ms_t now, struct subscriber *to,
struct subscriber *via,int sender_interface,
unsigned int s1,unsigned int s2,int score,int gateways_en_route);