mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-20 09:26:37 +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)
|
||||
{
|
||||
if (ob_makespace(b,1)) return WHY("ob_makespace() failed");
|
||||
|
||||
bcopy(&byte,&b->bytes[b->length],1);
|
||||
b->length++;
|
||||
b->bytes[b->length++] = byte;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -616,7 +616,7 @@ int rhizome_queue_manifest_import(rhizome_manifest *m, struct sockaddr_in *peeri
|
||||
fcntl(sock,F_SETFL, O_NONBLOCK);
|
||||
struct sockaddr_in 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));
|
||||
if ((errno!=EINPROGRESS)&&(r!=0)) {
|
||||
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 voice_mode=0;
|
||||
unsigned short int http_port = RHIZOME_HTTP_PORT;
|
||||
|
||||
/* behave differently during voice mode.
|
||||
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))
|
||||
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
|
||||
so that we can patch it later */
|
||||
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;
|
||||
int ofs=0;
|
||||
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;
|
||||
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 */
|
||||
while(ofs<f->payload->length) {
|
||||
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;
|
||||
}
|
||||
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 */
|
||||
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.");
|
||||
/* Don't waste any time on this manifest in future attempts for at least
|
||||
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);
|
||||
m=NULL;
|
||||
@ -430,7 +440,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
||||
m = NULL;
|
||||
} else if (m->errors) {
|
||||
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);
|
||||
m = NULL;
|
||||
} 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
|
||||
so that we can transfer by HTTP. */
|
||||
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) {
|
||||
@ -447,6 +457,7 @@ int overlay_rhizome_saw_advertisements(int i,overlay_frame *f, long long now)
|
||||
}
|
||||
ofs+=manifest_length;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -287,16 +287,19 @@ 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);
|
||||
if (rhizome_ad_frame_type>2)
|
||||
fprintf(f,"%sWARNING: Version is newer than I understand.\n",indent(10));
|
||||
i=1;
|
||||
if (rhizome_ad_frame_type==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)
|
||||
{
|
||||
switch (rhizome_ad_frame_type) {
|
||||
case 2:
|
||||
http_port = (frame[i] << 8) + frame[i+1];
|
||||
i += 2;
|
||||
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];
|
||||
/* Check for end of manifests */
|
||||
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," ");
|
||||
fprintf(f," ");
|
||||
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");
|
||||
}
|
||||
i=frame_len;
|
||||
@ -374,6 +377,10 @@ int isOverlayPacket(FILE *f,unsigned char *packet,int *ofs,int 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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user