mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 17:56:47 +00:00
Add HTTP port number to rhizome advertise packet
This commit is contained in:
parent
4764cf2ace
commit
3d0038754b
@ -160,9 +160,7 @@ int ob_bcopy(overlay_buffer *b,int from, int to, int len)
|
|||||||
int ob_append_byte(overlay_buffer *b,unsigned char byte)
|
int ob_append_byte(overlay_buffer *b,unsigned char byte)
|
||||||
{
|
{
|
||||||
if (ob_makespace(b,1)) return WHY("ob_makespace() failed");
|
if (ob_makespace(b,1)) return WHY("ob_makespace() failed");
|
||||||
|
b->bytes[b->length++] = byte;
|
||||||
bcopy(&byte,&b->bytes[b->length],1);
|
|
||||||
b->length++;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,7 +616,7 @@ int rhizome_queue_manifest_import(rhizome_manifest *m, struct sockaddr_in *peeri
|
|||||||
fcntl(sock,F_SETFL, O_NONBLOCK);
|
fcntl(sock,F_SETFL, O_NONBLOCK);
|
||||||
struct sockaddr_in peeraddr;
|
struct sockaddr_in peeraddr;
|
||||||
bcopy(peerip,&peeraddr,sizeof(peeraddr));
|
bcopy(peerip,&peeraddr,sizeof(peeraddr));
|
||||||
peeraddr.sin_port=htons(RHIZOME_HTTP_PORT);
|
//peeraddr.sin_port=htons(RHIZOME_HTTP_PORT);
|
||||||
int r=connect(sock,(struct sockaddr*)&peeraddr,sizeof(peeraddr));
|
int r=connect(sock,(struct sockaddr*)&peeraddr,sizeof(peeraddr));
|
||||||
if ((errno!=EINPROGRESS)&&(r!=0)) {
|
if ((errno!=EINPROGRESS)&&(r!=0)) {
|
||||||
WHY_perror("connect");
|
WHY_perror("connect");
|
||||||
|
@ -74,6 +74,7 @@ int bundle_offset[2]={0,0};
|
|||||||
int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
||||||
{
|
{
|
||||||
int voice_mode=0;
|
int voice_mode=0;
|
||||||
|
unsigned short int http_port = RHIZOME_HTTP_PORT;
|
||||||
|
|
||||||
/* behave differently during voice mode.
|
/* behave differently during voice mode.
|
||||||
Basically don't encourage people to grab stuff from us, but keep
|
Basically don't encourage people to grab stuff from us, but keep
|
||||||
@ -105,7 +106,9 @@ int overlay_rhizome_add_advertisements(int interface_number,overlay_buffer *e)
|
|||||||
|
|
||||||
if (ob_append_byte(e,OF_TYPE_RHIZOME_ADVERT))
|
if (ob_append_byte(e,OF_TYPE_RHIZOME_ADVERT))
|
||||||
return WHY("could not add rhizome bundle advertisement header");
|
return WHY("could not add rhizome bundle advertisement header");
|
||||||
ob_append_byte(e,1); /* TTL */
|
ob_append_byte(e,2); /* type */
|
||||||
|
ob_append_short(e, http_port); /* our HTTP server port */
|
||||||
|
|
||||||
int rfs_offset=e->length; /* remember where the RFS byte gets stored
|
int rfs_offset=e->length; /* remember where the RFS byte gets stored
|
||||||
so that we can patch it later */
|
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+8+1+1+1+RHIZOME_BAR_BYTES*slots_used/* RFS */);
|
||||||
@ -324,11 +327,18 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
if (!f) return -1;
|
if (!f) return -1;
|
||||||
int ofs=0;
|
int ofs=0;
|
||||||
int ad_frame_type=f->payload->bytes[ofs++];
|
int ad_frame_type=f->payload->bytes[ofs++];
|
||||||
|
struct sockaddr_in httpaddr = *(struct sockaddr_in *)f->recvaddr;
|
||||||
|
httpaddr.sin_port = RHIZOME_HTTP_PORT;
|
||||||
int manifest_length;
|
int manifest_length;
|
||||||
rhizome_manifest *m=NULL;
|
rhizome_manifest *m=NULL;
|
||||||
|
|
||||||
if (ad_frame_type==1)
|
switch (ad_frame_type) {
|
||||||
{
|
case 2:
|
||||||
|
/* 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;
|
||||||
|
// FALL THROUGH ...
|
||||||
|
case 1:
|
||||||
/* Extract whole manifests */
|
/* Extract whole manifests */
|
||||||
while(ofs<f->payload->length) {
|
while(ofs<f->payload->length) {
|
||||||
manifest_length=(f->payload->bytes[ofs]<<8)+f->payload->bytes[ofs+1];
|
manifest_length=(f->payload->bytes[ofs]<<8)+f->payload->bytes[ofs+1];
|
||||||
@ -388,7 +398,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int importManifest=0;
|
int importManifest=0;
|
||||||
if (rhizome_ignore_manifest_check(m,(struct sockaddr_in *)f->recvaddr))
|
if (rhizome_ignore_manifest_check(m, &httpaddr))
|
||||||
{
|
{
|
||||||
/* Ignoring manifest that has caused us problems recently */
|
/* Ignoring manifest that has caused us problems recently */
|
||||||
if (1) WARNF("Ignoring manifest with errors: %s*", manifest_id_prefix);
|
if (1) WARNF("Ignoring manifest with errors: %s*", manifest_id_prefix);
|
||||||
@ -410,7 +420,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
if (debug&DEBUG_RHIZOME) DEBUG("Unverified manifest has errors - so not processing any further.");
|
if (debug&DEBUG_RHIZOME) DEBUG("Unverified manifest has errors - so not processing any further.");
|
||||||
/* Don't waste any time on this manifest in future attempts for at least
|
/* Don't waste any time on this manifest in future attempts for at least
|
||||||
a minute. */
|
a minute. */
|
||||||
rhizome_queue_ignore_manifest(m,(struct sockaddr_in*)f->recvaddr,60000);
|
rhizome_queue_ignore_manifest(m, &httpaddr, 60000);
|
||||||
}
|
}
|
||||||
if (m) rhizome_manifest_free(m);
|
if (m) rhizome_manifest_free(m);
|
||||||
m=NULL;
|
m=NULL;
|
||||||
@ -430,7 +440,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
m = NULL;
|
m = NULL;
|
||||||
} else if (m->errors) {
|
} else if (m->errors) {
|
||||||
if (debug&DEBUG_RHIZOME) DEBUGF("Verifying manifest %s* revealed errors -- not storing.", manifest_id_prefix);
|
if (debug&DEBUG_RHIZOME) DEBUGF("Verifying manifest %s* revealed errors -- not storing.", manifest_id_prefix);
|
||||||
rhizome_queue_ignore_manifest(m,(struct sockaddr_in*)f->recvaddr,60000);
|
rhizome_queue_ignore_manifest(m, &httpaddr, 60000);
|
||||||
rhizome_manifest_free(m);
|
rhizome_manifest_free(m);
|
||||||
m = NULL;
|
m = NULL;
|
||||||
} else {
|
} else {
|
||||||
@ -438,7 +448,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
/* Add manifest to import queue. We need to know originating IPv4 address
|
/* Add manifest to import queue. We need to know originating IPv4 address
|
||||||
so that we can transfer by HTTP. */
|
so that we can transfer by HTTP. */
|
||||||
if (0) DEBUG("Suggesting fetching of a bundle");
|
if (0) DEBUG("Suggesting fetching of a bundle");
|
||||||
rhizome_suggest_queue_manifest_import(m,(struct sockaddr_in *)f->recvaddr);
|
rhizome_suggest_queue_manifest_import(m, &httpaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!manifest_length) {
|
if (!manifest_length) {
|
||||||
@ -447,6 +457,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
|||||||
}
|
}
|
||||||
ofs+=manifest_length;
|
ofs+=manifest_length;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -287,16 +287,19 @@ int isOverlayPacket(FILE *f,unsigned char *packet,int *ofs,int len)
|
|||||||
{
|
{
|
||||||
int i,j,k;
|
int i,j,k;
|
||||||
int rhizome_ad_frame_type=frame[0];
|
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);
|
fprintf(f,"%sRhizome bundle advertisement frame, version %d\n",indent(8),rhizome_ad_frame_type);
|
||||||
if (rhizome_ad_frame_type>2)
|
|
||||||
fprintf(f,"%sWARNING: Version is newer than I understand.\n",indent(10));
|
|
||||||
i=1;
|
i=1;
|
||||||
if (rhizome_ad_frame_type==1) {
|
switch (rhizome_ad_frame_type) {
|
||||||
/* Frame contains whole manifest(s) */
|
case 2:
|
||||||
fprintf(f,"%sBundle Manifest(s) (i=%d, frame_len=%d):\n",
|
http_port = (frame[i] << 8) + frame[i+1];
|
||||||
indent(8),i,frame_len);
|
i += 2;
|
||||||
while(i<frame_len)
|
fprintf(f,"%sHTTP port = %d\n", indent(8), http_port);
|
||||||
{
|
// FALL THROUGH ...
|
||||||
|
case 1:
|
||||||
|
/* 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];
|
int manifest_len=(frame[i]<<8)+frame[i+1];
|
||||||
/* Check for end of manifests */
|
/* Check for end of manifests */
|
||||||
if (manifest_len>=0xff00) { i+=1; break; }
|
if (manifest_len>=0xff00) { i+=1; break; }
|
||||||
@ -311,7 +314,7 @@ int isOverlayPacket(FILE *f,unsigned char *packet,int *ofs,int len)
|
|||||||
for(;j<16;j++) fprintf(f," ");
|
for(;j<16;j++) fprintf(f," ");
|
||||||
fprintf(f," ");
|
fprintf(f," ");
|
||||||
for(j=0;j<16&&(i+j)<frame_len;j++) fprintf(f,"%c",frame[i+j]>=' '
|
for(j=0;j<16&&(i+j)<frame_len;j++) fprintf(f,"%c",frame[i+j]>=' '
|
||||||
&&frame[i+j]<0x7c?frame[i+j]:'.');
|
&&frame[i+j]<0x7c?frame[i+j]:'.');
|
||||||
fprintf(f,"\n");
|
fprintf(f,"\n");
|
||||||
}
|
}
|
||||||
i=frame_len;
|
i=frame_len;
|
||||||
@ -374,6 +377,10 @@ int isOverlayPacket(FILE *f,unsigned char *packet,int *ofs,int len)
|
|||||||
}
|
}
|
||||||
i+=manifest_len;
|
i+=manifest_len;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(f,"%sWARNING: Version is newer than I understand.\n",indent(10));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(f,"%sBundle Advertisement Records (BARs):\n",indent(8));
|
fprintf(f,"%sBundle Advertisement Records (BARs):\n",indent(8));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user