commit
5cb09b3708
8 changed files with 157 additions and 134 deletions
|
@ -8,28 +8,33 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "varhexutils.h"
|
#include "varhexutils.h"
|
||||||
|
|
||||||
struct protocol
|
struct Protocol
|
||||||
{
|
{
|
||||||
char hexcode[21];
|
//char hexcode[21];
|
||||||
int deccode;
|
int deccode;
|
||||||
int size;
|
int size;
|
||||||
char name[30];
|
char name[30];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct protocol *protocol_P; //Pointer for holding multiple structures
|
struct ProtocolListItem {
|
||||||
|
struct Protocol* current;
|
||||||
|
struct ProtocolListItem* next;
|
||||||
|
};
|
||||||
|
|
||||||
int protocol_REMOVE_id(int remid); //Function to remove & shift back all data, sort of like c++ vectors.
|
int protocol_REMOVE_id(struct ProtocolListItem* head, int remid); //Function to remove & shift back all data, sort of like c++ vectors.
|
||||||
|
|
||||||
void unload_protocols();
|
void unload_protocols(struct ProtocolListItem* head);
|
||||||
|
|
||||||
void load_protocols();
|
/**
|
||||||
|
* load the available protocols into the global protocol_P
|
||||||
|
* @returns True(1) on success, otherwise 0
|
||||||
|
*/
|
||||||
|
int load_protocols(struct ProtocolListItem** head);
|
||||||
|
|
||||||
struct protocol * proto_with_name(char proto_w_name[]); //Search for protocol with inputted name
|
struct Protocol * proto_with_name(const struct ProtocolListItem* head, const char* proto_w_name); //Search for protocol with inputted name
|
||||||
|
|
||||||
struct protocol * proto_with_deccode(int proto_w_deccode); //Search for protocol with inputted deccode
|
struct Protocol * proto_with_deccode(const struct ProtocolListItem* head, int proto_w_deccode); //Search for protocol with inputted deccode
|
||||||
|
|
||||||
void pp(); //Purely for debugging purposes, prints the entire loaded protocols.
|
void protocols_with_string(const struct ProtocolListItem* head, char * meee, int sizi); // NOT FINISHED, DO NOT USE!
|
||||||
|
|
||||||
void protocols_with_string(char * meee,int sizi); // NOT FINISHED, DO NOT USE!
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -32,10 +32,10 @@ uint64_t ip2int(const char * ipconvertint);
|
||||||
char * int2ip(int inputintip);
|
char * int2ip(int inputintip);
|
||||||
|
|
||||||
//I didn't feel another address_bytes_to_string was necesarry sry guys
|
//I didn't feel another address_bytes_to_string was necesarry sry guys
|
||||||
int bytes_to_string(char * resultzx, const uint8_t * catx,int xbsize);
|
int bytes_to_string(char** resultzx, const uint8_t * catx,int xbsize);
|
||||||
|
|
||||||
char * address_string_to_bytes(struct protocol * xx, const char * abc, size_t getsznow);
|
char * address_string_to_bytes(struct Protocol * xx, const char * abc, size_t getsznow);
|
||||||
|
|
||||||
int string_to_bytes(uint8_t * finalbytes,size_t* realbbsize,char * strx, size_t strsize);
|
int string_to_bytes(uint8_t** finalbytes,size_t* realbbsize, const char * strx, size_t strsize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -33,7 +33,13 @@ void vthconvert(int size, char * crrz01, uint8_t * xbuf);
|
||||||
|
|
||||||
char * Var_To_Hex(int realsize, const uint8_t * TOHEXINPUT); //VAR[binformat] TO HEX
|
char * Var_To_Hex(int realsize, const uint8_t * TOHEXINPUT); //VAR[binformat] TO HEX
|
||||||
|
|
||||||
uint8_t * Hex_To_Var(char * Hexstr); //HEX TO VAR[BINFORMAT]
|
/**
|
||||||
|
* Turn a hex string into a byte array
|
||||||
|
* @param incoming a string of hex values
|
||||||
|
* @param num_bytes the size of the result
|
||||||
|
* @returns a pointer to the converted value
|
||||||
|
*/
|
||||||
|
unsigned char* Hex_To_Var(char * Hexstr, size_t* num_bytes);
|
||||||
|
|
||||||
//
|
//
|
||||||
void convert(char * convert_result, uint8_t * buf); //Both of them read them properly.
|
void convert(char * convert_result, uint8_t * buf); //Both of them read them properly.
|
||||||
|
|
|
@ -50,7 +50,7 @@ struct MultiAddress* multiaddress_new_from_bytes(const uint8_t* byteaddress, int
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memcpy(out->bytes, byteaddress, size);
|
memcpy(out->bytes, byteaddress, size);
|
||||||
if(!bytes_to_string(out->string,byteaddress,size)==1)
|
if(!bytes_to_string(&out->string,byteaddress,size)==1)
|
||||||
{
|
{
|
||||||
multiaddress_free(out);
|
multiaddress_free(out);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -64,14 +64,14 @@ struct MultiAddress* multiaddress_new_from_string(const char* straddress)//Const
|
||||||
{
|
{
|
||||||
struct MultiAddress* out = multiaddress_new();
|
struct MultiAddress* out = multiaddress_new();
|
||||||
if (out != NULL) {
|
if (out != NULL) {
|
||||||
out->string = malloc(sizeof(straddress) + 1);
|
out->string = malloc(strlen(straddress) + 1);
|
||||||
if (out->string == NULL) {
|
if (out->string == NULL) {
|
||||||
multiaddress_free(out);
|
multiaddress_free(out);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strcpy(out->string, straddress);
|
strcpy(out->string, straddress);
|
||||||
|
|
||||||
if (string_to_bytes(out->bytes, &out->bsize, out->string, sizeof(out->string)) == 0 )
|
if (string_to_bytes(&out->bytes, &out->bsize, out->string, strlen(out->string)) == 0 )
|
||||||
{
|
{
|
||||||
multiaddress_free(out);
|
multiaddress_free(out);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -138,7 +138,7 @@ int multiaddress_encapsulate(struct MultiAddress* result, char* string)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strcpy(result->string, string);
|
strcpy(result->string, string);
|
||||||
if(string_to_bytes(result->bytes, &result->bsize, result->string, sizeof(result->string)) == 0)
|
if(string_to_bytes(&result->bytes, &result->bsize, result->string, sizeof(result->string)) == 0)
|
||||||
{
|
{
|
||||||
multiaddress_free(result);
|
multiaddress_free(result);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
113
protocols.c
113
protocols.c
|
@ -7,23 +7,20 @@
|
||||||
#include "multiaddr/protocols.h"
|
#include "multiaddr/protocols.h"
|
||||||
#include "multiaddr/varhexutils.h"
|
#include "multiaddr/varhexutils.h"
|
||||||
|
|
||||||
int CNT_PROTOCOLNUM=0;
|
/*
|
||||||
|
int protocol_REMOVE_id(struct ProtocolListItem* protocol_P, int remid)//Function to remove & shift back all data, sort of like c++ vectors.
|
||||||
struct protocol *protocol_P; //Pointer for holding multiple structures
|
|
||||||
|
|
||||||
int protocol_REMOVE_id(int remid)//Function to remove & shift back all data, sort of like c++ vectors.
|
|
||||||
{
|
{
|
||||||
|
|
||||||
if(remid < CNT_PROTOCOLNUM && remid >= 0&&CNT_PROTOCOLNUM!=0) //Checking to see if remid actually exists.
|
if(remid < CNT_PROTOCOLNUM && remid >= 0&&CNT_PROTOCOLNUM!=0) //Checking to see if remid actually exists.
|
||||||
{
|
{
|
||||||
for(int i=remid; i<CNT_PROTOCOLNUM-1; ++i) //While i < num of registered protocols //Needs to be tested that -1 is for valgrind debugging
|
for(int i=remid; i<CNT_PROTOCOLNUM-1; ++i) //While i < num of registered protocols //Needs to be tested that -1 is for valgrind debugging
|
||||||
{
|
{
|
||||||
strcpy((protocol_P+i)->hexcode, (protocol_P+i+1)->hexcode); //shift memory to the user we want to remove.
|
//strcpy((protocol_P+i)->hexcode, (protocol_P+i+1)->hexcode); //shift memory to the user we want to remove.
|
||||||
(protocol_P+i)->deccode = (protocol_P+i+1)->deccode; //Same as above
|
(protocol_P+i)->deccode = (protocol_P+i+1)->deccode; //Same as above
|
||||||
(protocol_P+i)->size = (protocol_P+i+1)->size; //Same as above
|
(protocol_P+i)->size = (protocol_P+i+1)->size; //Same as above
|
||||||
strcpy((protocol_P+i)->name, (protocol_P+i+1)->name); //Same as above
|
strcpy((protocol_P+i)->name, (protocol_P+i+1)->name); //Same as above
|
||||||
}//Overwriting user done. Time to get rid of that extra memory.
|
}//Overwriting user done. Time to get rid of that extra memory.
|
||||||
protocol_P = (struct protocol*) realloc(protocol_P, (CNT_PROTOCOLNUM-1) * sizeof(struct protocol));
|
protocol_P = (struct Protocol*) realloc(protocol_P, (CNT_PROTOCOLNUM-1) * sizeof(struct Protocol));
|
||||||
//Memory erased,
|
//Memory erased,
|
||||||
CNT_PROTOCOLNUM--; //Since the record no longer exists, we should decrease the ammount of users.
|
CNT_PROTOCOLNUM--; //Since the record no longer exists, we should decrease the ammount of users.
|
||||||
return 1; //Purely for error checking, in case someone ever wants it/
|
return 1; //Purely for error checking, in case someone ever wants it/
|
||||||
|
@ -41,13 +38,52 @@ int protocol_REMOVE_id(int remid)//Function to remove & shift back all data, sor
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void unload_protocols()
|
*/
|
||||||
|
|
||||||
|
void unload_protocols(struct ProtocolListItem* head)
|
||||||
{
|
{
|
||||||
free(protocol_P);
|
struct ProtocolListItem* current = head;
|
||||||
CNT_PROTOCOLNUM=0;
|
while (current != NULL) {
|
||||||
|
struct ProtocolListItem* next = current->next;
|
||||||
|
free(current->current);
|
||||||
|
free(current);
|
||||||
|
current = next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void load_protocols()
|
|
||||||
|
/**
|
||||||
|
* load the available protocols into the global protocol_P
|
||||||
|
* @returns True(1) on success, otherwise 0
|
||||||
|
*/
|
||||||
|
int load_protocols(struct ProtocolListItem** head)
|
||||||
{
|
{
|
||||||
|
unload_protocols(*head);
|
||||||
|
int num_protocols = 14;
|
||||||
|
int dec_code[] = {4, 41, 6, 17, 33, 132, 301, 302, 42, 480, 443, 477, 444, 275};
|
||||||
|
int size[] = {32, 128, 16, 16, 16, 16, 0, 0, -1, 0, 0, 0, 10, 0 };
|
||||||
|
char* name[] = { "ip4", "ip6", "tcp", "udp", "dccp", "sctp", "udt", "utp", "ipfs", "http", "https", "ws", "onion", "libp2p-webrtc-star" };
|
||||||
|
struct ProtocolListItem* last = NULL;
|
||||||
|
for(int i = 0; i < num_protocols; i++) {
|
||||||
|
struct ProtocolListItem* current_item = (struct ProtocolListItem*)malloc(sizeof(struct ProtocolListItem));
|
||||||
|
current_item->current = (struct Protocol*)malloc(sizeof(struct Protocol));
|
||||||
|
current_item->next = NULL;
|
||||||
|
current_item->current->deccode = dec_code[i];
|
||||||
|
strcpy(current_item->current->name, name[i]);
|
||||||
|
current_item->current->size = size[i];
|
||||||
|
if (*head == NULL) {
|
||||||
|
*head = current_item;
|
||||||
|
} else {
|
||||||
|
last->next = current_item;
|
||||||
|
}
|
||||||
|
last = current_item;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void load_protocols_from_file(struct Protocol** in)
|
||||||
|
{
|
||||||
|
struct Protocol* protocol_P = *in;
|
||||||
FILE *FPROC_POINT; //File pointer.
|
FILE *FPROC_POINT; //File pointer.
|
||||||
FPROC_POINT = fopen("proto-dat", "r");//Opening proto-dat Or protocols.csv, I just formatted it to my liking.
|
FPROC_POINT = fopen("proto-dat", "r");//Opening proto-dat Or protocols.csv, I just formatted it to my liking.
|
||||||
if(FPROC_POINT != NULL) //While pointer is not null.
|
if(FPROC_POINT != NULL) //While pointer is not null.
|
||||||
|
@ -62,13 +98,13 @@ void load_protocols()
|
||||||
//ADD MEMORY FOR NEW PROTOCOL
|
//ADD MEMORY FOR NEW PROTOCOL
|
||||||
if(CNT_PROTOCOLNUM==0) //If there are no registered protocols yet, allocate memory to pointer.
|
if(CNT_PROTOCOLNUM==0) //If there are no registered protocols yet, allocate memory to pointer.
|
||||||
{
|
{
|
||||||
protocol_P = (struct protocol*) malloc (sizeof(struct protocol));
|
protocol_P = (struct Protocol*) malloc (sizeof(struct Protocol));
|
||||||
}
|
}
|
||||||
else //Reallocate memory to fit one more protocol
|
else //Reallocate memory to fit one more Protocol
|
||||||
{
|
{
|
||||||
protocol_P = (struct protocol*) realloc(protocol_P, (CNT_PROTOCOLNUM+1) * sizeof(struct protocol));
|
protocol_P = (struct Protocol*) realloc(protocol_P, (CNT_PROTOCOLNUM+1) * sizeof(struct protocol));
|
||||||
}
|
}
|
||||||
strcpy((protocol_P+CNT_PROTOCOLNUM)->hexcode, W_BUFF); //Copy word to structure at hexcode A hexcode is a string so we keep it as such
|
//strcpy((protocol_P+CNT_PROTOCOLNUM)->hexcode, W_BUFF); //Copy word to structure at hexcode A hexcode is a string so we keep it as such
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1://Second word - DECCODE
|
case 1://Second word - DECCODE
|
||||||
|
@ -96,53 +132,42 @@ void load_protocols()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(FPROC_POINT);
|
fclose(FPROC_POINT);
|
||||||
protocol_REMOVE_id(0);
|
protocol_REMOVE_id(protocol_P, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perror("Fatal Error:");
|
perror("Fatal Error:");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
struct protocol * proto_with_name(char proto_w_name[]) //Search for protocol with inputted name
|
*/
|
||||||
{
|
|
||||||
|
|
||||||
for(int i=0; i<CNT_PROTOCOLNUM; i++)
|
struct Protocol* proto_with_name(const struct ProtocolListItem* head, const char* proto_w_name) //Search for Protocol with inputted name
|
||||||
|
{
|
||||||
|
const struct ProtocolListItem* current = head;
|
||||||
|
while(current != NULL)
|
||||||
{
|
{
|
||||||
if(strcmp(proto_w_name, (protocol_P+i)->name) == 0)
|
if (strcmp(proto_w_name, current->current->name) == 0) {
|
||||||
{
|
return current->current;
|
||||||
return (protocol_P+i);
|
|
||||||
}
|
}
|
||||||
|
current = current->next;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
struct protocol * proto_with_deccode(int proto_w_deccode) //Search for protocol with inputted deccode
|
|
||||||
|
struct Protocol* proto_with_deccode(const struct ProtocolListItem* head, int proto_w_deccode) //Search for Protocol with inputted deccode
|
||||||
{
|
{
|
||||||
for(int i=0; i<CNT_PROTOCOLNUM; i++)
|
const struct ProtocolListItem* current = head;
|
||||||
|
while(current != NULL)
|
||||||
{
|
{
|
||||||
if((protocol_P+i)->deccode == proto_w_deccode)
|
if (current->current->deccode == proto_w_deccode) {
|
||||||
{
|
return current->current;
|
||||||
return (protocol_P+i);
|
|
||||||
}
|
}
|
||||||
|
current = current->next;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
void pp() //Purely for debugging purposes, prints the entire loaded protocols.
|
|
||||||
{
|
void protocols_with_string(const struct ProtocolListItem* head, char* meee, int sizi) // NOT FINISHED, DO NOT USE!
|
||||||
for(int i=0;i<CNT_PROTOCOLNUM;i++)
|
|
||||||
{
|
|
||||||
if(i>=9)
|
|
||||||
{printf("=========== ~%d~ ===========\n", i+1);}
|
|
||||||
else
|
|
||||||
{printf("=========== ~0%d~ ===========\n", i+1);}
|
|
||||||
printf(">> HEX-CODE: %s\n", (protocol_P+i)->hexcode);
|
|
||||||
printf(">> DEC-CODE: %d\n", (protocol_P+i)->deccode);
|
|
||||||
printf(">> SIZE: %d\n", (protocol_P+i)->size);
|
|
||||||
printf(">> NAME: %s\n", (protocol_P+i)->name);
|
|
||||||
}
|
|
||||||
printf("----------------------------\n");
|
|
||||||
printf("TOTAL PROTOCOLS: %d\n",CNT_PROTOCOLNUM);
|
|
||||||
}
|
|
||||||
void protocols_with_string(char * meee,int sizi) // NOT FINISHED, DO NOT USE!
|
|
||||||
{
|
{
|
||||||
int finalsize = 0;
|
int finalsize = 0;
|
||||||
|
|
||||||
|
|
83
protoutils.c
83
protoutils.c
|
@ -291,13 +291,16 @@ char * int2ip(int inputintip)
|
||||||
return xxx_int2ip_result;
|
return xxx_int2ip_result;
|
||||||
}
|
}
|
||||||
//I didn't feel another address_bytes_to_string was necesarry sry guys
|
//I didn't feel another address_bytes_to_string was necesarry sry guys
|
||||||
int bytes_to_string(char * resultzx, const uint8_t* catx,int xbsize)
|
int bytes_to_string(char** buffer, const uint8_t* catx, int xbsize)
|
||||||
{
|
{
|
||||||
bzero(resultzx,800);
|
*buffer = malloc(800);
|
||||||
|
char* resultzx = *buffer;
|
||||||
|
bzero(resultzx, 800);
|
||||||
uint8_t * bytes = NULL;
|
uint8_t * bytes = NULL;
|
||||||
int size = 0;
|
int size = 0;
|
||||||
size = xbsize;
|
size = xbsize;
|
||||||
load_protocols();
|
struct ProtocolListItem* head = NULL;
|
||||||
|
load_protocols(&head);
|
||||||
char hex[xbsize*2];
|
char hex[xbsize*2];
|
||||||
bzero(hex,xbsize*2);
|
bzero(hex,xbsize*2);
|
||||||
strcat(hex,Var_To_Hex(size, catx));
|
strcat(hex,Var_To_Hex(size, catx));
|
||||||
|
@ -309,21 +312,17 @@ int bytes_to_string(char * resultzx, const uint8_t* catx,int xbsize)
|
||||||
//Stage 1 ID:
|
//Stage 1 ID:
|
||||||
if(lastpos!=0)
|
if(lastpos!=0)
|
||||||
{
|
{
|
||||||
lastpos+1;
|
lastpos++;
|
||||||
}
|
}
|
||||||
pid[0] = hex[lastpos];
|
pid[0] = hex[lastpos];
|
||||||
pid[1] = hex[lastpos+1];
|
pid[1] = hex[lastpos+1];
|
||||||
pid[2] = '\0';
|
pid[2] = '\0';
|
||||||
if(lastpos == 0)
|
if(proto_with_deccode(head, Hex_To_Int(pid)))
|
||||||
{
|
|
||||||
load_protocols();
|
|
||||||
}
|
|
||||||
if(proto_with_deccode(Hex_To_Int(pid)))
|
|
||||||
{
|
{
|
||||||
//////////Stage 2: Address
|
//////////Stage 2: Address
|
||||||
struct protocol * PID;
|
struct Protocol * PID;
|
||||||
PID = NULL;
|
PID = NULL;
|
||||||
PID = proto_with_deccode(Hex_To_Int(pid));
|
PID = proto_with_deccode(head, Hex_To_Int(pid));
|
||||||
if(strcmp(PID->name,"ipfs")!=0)
|
if(strcmp(PID->name,"ipfs")!=0)
|
||||||
{
|
{
|
||||||
lastpos = lastpos+2;
|
lastpos = lastpos+2;
|
||||||
|
@ -403,9 +402,8 @@ int bytes_to_string(char * resultzx, const uint8_t* catx,int xbsize)
|
||||||
//printf("\nIPFS_ADDR[%d] = %c\n\n",IPFS_PARSE,hex[i]);
|
//printf("\nIPFS_ADDR[%d] = %c\n\n",IPFS_PARSE,hex[i]);
|
||||||
IPFS_PARSE++;
|
IPFS_PARSE++;
|
||||||
}
|
}
|
||||||
unsigned char addrbuf[strlen(IPFS_ADDR)/2];
|
size_t num_bytes = 0;
|
||||||
bzero(addrbuf,strlen(IPFS_ADDR)/2);
|
unsigned char* addrbuf = Hex_To_Var(IPFS_ADDR, &num_bytes);
|
||||||
memcpy(addrbuf,Hex_To_Var(IPFS_ADDR),sizeof(addrbuf));
|
|
||||||
size_t rezbuflen = strlen(IPFS_ADDR);
|
size_t rezbuflen = strlen(IPFS_ADDR);
|
||||||
unsigned char rezultat[rezbuflen];
|
unsigned char rezultat[rezbuflen];
|
||||||
bzero(rezultat,rezbuflen);
|
bzero(rezultat,rezbuflen);
|
||||||
|
@ -413,9 +411,11 @@ int bytes_to_string(char * resultzx, const uint8_t* catx,int xbsize)
|
||||||
pointyaddr = rezultat;
|
pointyaddr = rezultat;
|
||||||
int returnstatus = 0;
|
int returnstatus = 0;
|
||||||
returnstatus = multiaddr_encoding_base58_encode(addrbuf, sizeof(addrbuf), &pointyaddr, &rezbuflen);
|
returnstatus = multiaddr_encoding_base58_encode(addrbuf, sizeof(addrbuf), &pointyaddr, &rezbuflen);
|
||||||
|
free(addrbuf);
|
||||||
if(returnstatus == 0)
|
if(returnstatus == 0)
|
||||||
{
|
{
|
||||||
printf("\nERROR!!!!!\n");
|
printf("\nERROR!!!!!\n");
|
||||||
|
unload_protocols(head);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strcat(resultzx, "/");
|
strcat(resultzx, "/");
|
||||||
|
@ -425,12 +425,13 @@ int bytes_to_string(char * resultzx, const uint8_t* catx,int xbsize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strcat(resultzx, "/");
|
strcat(resultzx, "/");
|
||||||
unload_protocols();
|
unload_protocols(head);
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
char * address_string_to_bytes(struct protocol * xx, const char * abc,size_t getsznow)
|
char * address_string_to_bytes(struct Protocol * xx, const char * abc,size_t getsznow)
|
||||||
{
|
{
|
||||||
static char astb__stringy[800] = "\0";
|
static char astb__stringy[800] = "\0";
|
||||||
bzero(astb__stringy,800);
|
bzero(astb__stringy,800);
|
||||||
|
@ -644,48 +645,43 @@ char * address_string_to_bytes(struct protocol * xx, const char * abc,size_t get
|
||||||
* @param strx the incoming string
|
* @param strx the incoming string
|
||||||
* @param strsize the string length
|
* @param strsize the string length
|
||||||
*/
|
*/
|
||||||
int string_to_bytes(uint8_t * finalbytes, size_t* realbbsize, char * strx, size_t strsize)
|
int string_to_bytes(uint8_t** finalbytes, size_t* realbbsize, const char* strx, size_t strsize)
|
||||||
{
|
{
|
||||||
if(strx[0] != '/')
|
if(strx[0] != '/')
|
||||||
{
|
{
|
||||||
printf("Error, must start with '/'\n");
|
printf("Error, must start with '/'\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//Getting total words
|
|
||||||
int totalwords = 0;
|
|
||||||
char* totp;
|
|
||||||
char totalwordstest[strsize + 1];
|
|
||||||
bzero(totalwordstest,strsize + 1);
|
|
||||||
strcat(totalwordstest, strx);
|
|
||||||
totp = strtok(totalwordstest, "/");
|
|
||||||
while(totp != NULL)
|
|
||||||
{
|
|
||||||
totp = strtok (NULL, "/");
|
|
||||||
totalwords++;
|
|
||||||
}
|
|
||||||
//Initializing variables to store our processed HEX in:
|
//Initializing variables to store our processed HEX in:
|
||||||
int malf=0; //In case something goes wrong this will be 1.
|
int malf=0; //In case something goes wrong this will be 1.
|
||||||
char processed[800];//HEX CONTAINER
|
char processed[800];//HEX CONTAINER
|
||||||
bzero(processed,800);
|
bzero(processed,800);
|
||||||
|
|
||||||
//Now Setting up variables for calculating which is the first
|
//Now Setting up variables for calculating which is the first
|
||||||
//and second word:
|
//and second word:
|
||||||
int firstorsecond = 1; //1=Protocol && 2 = Address
|
int firstorsecond = 1; //1=Protocol && 2 = Address
|
||||||
char pstring[strsize + 1];//We do not want to harm the initial string.
|
|
||||||
bzero(pstring,strsize + 1);
|
// copy input so as to not harm it
|
||||||
strcat(pstring,strx);
|
char pstring[strsize + 1];
|
||||||
|
strcpy(pstring,strx);
|
||||||
|
|
||||||
|
// load up the list of protocols
|
||||||
|
struct ProtocolListItem* head = NULL;
|
||||||
|
load_protocols(&head);
|
||||||
|
|
||||||
//Starting to extract words and process them:
|
//Starting to extract words and process them:
|
||||||
char * wp;
|
char * wp;
|
||||||
char * end;
|
char * end;
|
||||||
wp=strtok_r(pstring,"/",&end);
|
wp=strtok_r(pstring,"/",&end);
|
||||||
load_protocols();
|
struct Protocol * protx;
|
||||||
struct protocol * protx;
|
|
||||||
while(wp)
|
while(wp)
|
||||||
{
|
{
|
||||||
if(firstorsecond==1)//This is the Protocol
|
if(firstorsecond==1)//This is the Protocol
|
||||||
{
|
{
|
||||||
if(proto_with_name(wp))
|
if(proto_with_name(head, wp))
|
||||||
{
|
{
|
||||||
protx=proto_with_name(wp);
|
protx=proto_with_name(head, wp);
|
||||||
//printf("PROTOCOL: %s\n",protx->name);
|
//printf("PROTOCOL: %s\n",protx->name);
|
||||||
strcat(processed, Int_To_Hex(protx->deccode));
|
strcat(processed, Int_To_Hex(protx->deccode));
|
||||||
firstorsecond=2;//Since the next word will be an address
|
firstorsecond=2;//Since the next word will be an address
|
||||||
|
@ -716,8 +712,7 @@ int string_to_bytes(uint8_t * finalbytes, size_t* realbbsize, char * strx, size_
|
||||||
wp=strtok_r(NULL,"/",&end);
|
wp=strtok_r(NULL,"/",&end);
|
||||||
}
|
}
|
||||||
protx=NULL;
|
protx=NULL;
|
||||||
unload_protocols();
|
unload_protocols(head);
|
||||||
//printf("Processed contains: %s \n",processed);
|
|
||||||
|
|
||||||
if(malf==1)
|
if(malf==1)
|
||||||
{
|
{
|
||||||
|
@ -725,17 +720,7 @@ int string_to_bytes(uint8_t * finalbytes, size_t* realbbsize, char * strx, size_
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bzero(finalbytes,400);
|
*finalbytes = Hex_To_Var(processed, realbbsize);
|
||||||
//printf("XXX: %s\n",xxx);
|
|
||||||
memcpy(finalbytes, Hex_To_Var(processed), 400);
|
|
||||||
realbbsize[0] = 0;
|
|
||||||
for(int i=0;i<400;i++)
|
|
||||||
{
|
|
||||||
if(finalbytes[i])
|
|
||||||
{
|
|
||||||
realbbsize[0]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,7 @@
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
char addrstr[100];
|
char addrstr[100];
|
||||||
bzero(addrstr,100);
|
strcpy(addrstr,"/ip4/192.168.1.1/tcp/8080/");
|
||||||
strcat(addrstr,"/ip4/192.168.1.1/tcp/8080/");
|
|
||||||
printf("INITIAL: %s\n",addrstr);
|
printf("INITIAL: %s\n",addrstr);
|
||||||
struct MultiAddress* a;
|
struct MultiAddress* a;
|
||||||
a= multiaddress_new_from_string(addrstr);
|
a= multiaddress_new_from_string(addrstr);
|
||||||
|
@ -14,7 +13,7 @@ int main()
|
||||||
//Remember, Decapsulation happens from right to left, never in reverse!
|
//Remember, Decapsulation happens from right to left, never in reverse!
|
||||||
|
|
||||||
printf("A STRING:%s\n",a->string);
|
printf("A STRING:%s\n",a->string);
|
||||||
multiaddress_encapsulate(a,"/ip4/192.31.200.1/udp/3333/");
|
multiaddress_encapsulate(a,"/ip4/192.131.200.111/udp/3333/");
|
||||||
printf("A STRING ENCAPSULATED:%s\n",a->string);
|
printf("A STRING ENCAPSULATED:%s\n",a->string);
|
||||||
|
|
||||||
multiaddress_decapsulate(a,"udp");
|
multiaddress_decapsulate(a,"udp");
|
||||||
|
@ -24,7 +23,7 @@ int main()
|
||||||
printf("A STRING ENCAPSULATED TCP:%s\n",a->string);
|
printf("A STRING ENCAPSULATED TCP:%s\n",a->string);
|
||||||
|
|
||||||
struct MultiAddress* beta;
|
struct MultiAddress* beta;
|
||||||
beta=multiaddress_new_from_bytes(a->bytes,a->bsize);
|
beta = multiaddress_new_from_bytes(a->bytes,a->bsize);
|
||||||
printf("B STRING: %s\n",beta->string);
|
printf("B STRING: %s\n",beta->string);
|
||||||
|
|
||||||
multiaddress_free(a);
|
multiaddress_free(a);
|
||||||
|
|
|
@ -116,32 +116,35 @@ char * Var_To_Hex(int realsize, const uint8_t * TOHEXINPUT) //VAR[binformat] TO
|
||||||
return convert_resultz1;
|
return convert_resultz1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uint8_t * Hex_To_Var(char * Hexstr) //HEX TO VAR[BINFORMAT]
|
|
||||||
|
/**
|
||||||
|
* Turn a hex string into a byte array
|
||||||
|
* @param incoming a string of hex values
|
||||||
|
* @param num_bytes the size of the result
|
||||||
|
* @returns a pointer to the converted value
|
||||||
|
*/
|
||||||
|
unsigned char* Hex_To_Var(const char* incoming, size_t* num_bytes) //HEX TO VAR[BINFORMAT]
|
||||||
{
|
{
|
||||||
static uint8_t buffy_HEX[400] = {0};
|
// the return value
|
||||||
bzero(buffy_HEX,400);
|
unsigned char* retVal = NULL;
|
||||||
int i;
|
int incoming_size = strlen(incoming);
|
||||||
char codo[800] = "\0";
|
*num_bytes = incoming_size / 2;
|
||||||
bzero(codo,800);
|
retVal = (unsigned char*)malloc(*num_bytes);
|
||||||
strcpy(codo, Hexstr);
|
|
||||||
char code[3];
|
char code[3];
|
||||||
bzero(code,3);
|
|
||||||
code[3]='\0';
|
code[3]='\0';
|
||||||
int x = 0;
|
int i=0;
|
||||||
int fori001=0;
|
for(i=0; i < incoming_size; i += 2)
|
||||||
for(fori001=0;fori001<800;fori001++)
|
|
||||||
{
|
{
|
||||||
strncpy(&code[0],&codo[fori001],1);
|
code[0] = incoming[i];
|
||||||
strncpy(&code[1],&codo[fori001+1],1);
|
code[1] = incoming[i+1];
|
||||||
char *ck = NULL;
|
char *ck = NULL;
|
||||||
uint64_t lu = 0;
|
uint64_t lu = 0;
|
||||||
lu=strtoul(code, &ck, 16);
|
lu=strtoul(code, &ck, 16);
|
||||||
buffy_HEX[x] = lu;
|
retVal[i] = lu;
|
||||||
//printf("%s - %lu\n",code,lu);
|
i++;
|
||||||
fori001++;
|
|
||||||
x++;
|
|
||||||
}
|
}
|
||||||
return buffy_HEX;
|
return retVal;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
void convert(char * convert_result, uint8_t * buf) //Both of them read them properly.
|
void convert(char * convert_result, uint8_t * buf) //Both of them read them properly.
|
||||||
|
|
Loading…
Reference in a new issue