mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-04-07 02:56:44 +00:00
Fix rhizome HTTP port number in packet
This commit is contained in:
parent
0a667a374e
commit
d689e96454
@ -92,7 +92,7 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
||||
|
||||
int pass;
|
||||
int bytes=e->sizeLimit-e->length;
|
||||
int overhead=1+8+1+3+1+1+1; /* maximum overhead */
|
||||
int overhead=1+11+1+2+2; /* maximum overhead */
|
||||
int slots=(bytes-overhead)/RHIZOME_BAR_BYTES;
|
||||
if (slots>30) slots=30;
|
||||
int slots_used=0;
|
||||
@ -106,14 +106,13 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
||||
|
||||
if (ob_append_byte(e,OF_TYPE_RHIZOME_ADVERT))
|
||||
return WHY("could not add rhizome bundle advertisement header");
|
||||
ob_append_byte(e,2); /* type */
|
||||
ob_append_short(e, http_port); /* our HTTP server port */
|
||||
ob_append_byte(e, 1); /* TTL (1 byte) */
|
||||
|
||||
int rfs_offset=e->length; /* remember where the RFS byte gets stored
|
||||
so that we can patch it later */
|
||||
ob_append_byte(e,1+8+1+1+1+RHIZOME_BAR_BYTES*slots_used/* RFS */);
|
||||
ob_append_byte(e,1+11+1+2+RHIZOME_BAR_BYTES*slots_used/* RFS */);
|
||||
|
||||
/* Stuff in dummy address fields */
|
||||
/* Stuff in dummy address fields (11 bytes) */
|
||||
ob_append_byte(e,OA_CODE_BROADCAST);
|
||||
{ int i; for(i=0;i<8;i++) ob_append_byte(e,random()&0xff); } /* BPI for broadcast */
|
||||
ob_append_byte(e,OA_CODE_PREVIOUS);
|
||||
@ -121,10 +120,15 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
||||
|
||||
/* Randomly choose whether to advertise manifests or BARs first. */
|
||||
int skipmanifests=random()&1;
|
||||
/* Version of rhizome advert block:
|
||||
/* Version of rhizome advert block (1 byte):
|
||||
1 = manifests then BARs,
|
||||
2 = BARs only */
|
||||
ob_append_byte(e,1+skipmanifests);
|
||||
2 = BARs only,
|
||||
3 = HTTP port then manifests then BARs,
|
||||
4 = HTTP port then BARs only
|
||||
*/
|
||||
ob_append_byte(e,3+skipmanifests);
|
||||
/* Rhizome HTTP server port number (2 bytes) */
|
||||
ob_append_short(e, http_port);
|
||||
|
||||
/* XXX Should add priority bundles here.
|
||||
XXX Should prioritise bundles for subscribed groups, Serval-authorised files
|
||||
@ -306,7 +310,7 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
||||
if (statement) sqlite3_finalize(statement); statement=NULL;
|
||||
|
||||
if (0&&debug&DEBUG_RHIZOME) DEBUGF("Appended %d rhizome advertisements to packet using %d bytes.",bundles_advertised,bytes_used);
|
||||
int rfs_value=1+8+1+1+1+bytes_used;
|
||||
int rfs_value=1+11+1+2+bytes_used;
|
||||
if (rfs_value<0xfa)
|
||||
ob_setbyte(e,rfs_offset,rfs_value);
|
||||
else
|
||||
@ -333,7 +337,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
||||
rhizome_manifest *m=NULL;
|
||||
|
||||
switch (ad_frame_type) {
|
||||
case 2:
|
||||
case 3:
|
||||
/* The same as type=1, but includes the source HTTP port number */
|
||||
httpaddr.sin_port = (f->payload->bytes[ofs] << 8) + f->payload->bytes[ofs + 1];
|
||||
ofs += 2;
|
||||
|
@ -287,23 +287,36 @@ int isOverlayPacket(FILE *f,unsigned char *packet,int *ofs,int len)
|
||||
{
|
||||
int i,j,k;
|
||||
int rhizome_ad_frame_type=frame[0];
|
||||
unsigned short int http_port = 0;
|
||||
fprintf(f,"%sRhizome bundle advertisement frame, version %d\n",indent(8),rhizome_ad_frame_type);
|
||||
unsigned short int http_port = 0;
|
||||
i=1;
|
||||
switch (rhizome_ad_frame_type) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
http_port = (frame[i] << 8) + frame[i+1];
|
||||
i += 2;
|
||||
fprintf(f,"%sHTTP port = %d\n", indent(8), http_port);
|
||||
// FALL THROUGH ...
|
||||
break;
|
||||
}
|
||||
switch (rhizome_ad_frame_type) {
|
||||
case 2:
|
||||
case 4:
|
||||
fprintf(f,"%sBundle BAR(s) (i=%d, frame_len=%d):\n", indent(8),i,frame_len);
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
/* Frame contains whole manifest(s) */
|
||||
fprintf(f,"%sBundle Manifest(s) (i=%d, frame_len=%d):\n", indent(8),i,frame_len);
|
||||
while(i<frame_len) {
|
||||
int manifest_len=(frame[i]<<8)+frame[i+1];
|
||||
/* Check for end of manifests */
|
||||
if (manifest_len>=0xff00) { i+=1; break; }
|
||||
else i+=2;
|
||||
if (frame[i] == 0xff) { i+=1; break; }
|
||||
/* Check remaining bytes */
|
||||
int manifest_len=(frame[i]<<8)+frame[i+1];
|
||||
i+=2;
|
||||
if (i > frame_len) {
|
||||
fprintf(f,"%sERROR: Unexpected end of Frame -- skipping rest of frame.\n",indent(10));
|
||||
break;
|
||||
}
|
||||
if (manifest_len>(frame_len-i)) {
|
||||
fprintf(f,"%sERROR: Manifest extends for 0x%x bytes, but frame contains only 0x%x more bytes -- skipping rest of frame.\n",indent(10),manifest_len,frame_len-i);
|
||||
int j;
|
||||
|
Loading…
x
Reference in New Issue
Block a user