c-multicodec/header.h

183 lines
4.1 KiB
C

#ifndef MULTICODEC_HEADER
#define MULTICODEC_HEADER
#include "vhutils.h"
int header_from_string(char * dest,size_t destsize, char * src,size_t srcsize)
{
char result[destsize+2];
bzero(result,destsize+2);
strcpy(result, Int_To_Hex(srcsize-1));
printf("SZ: %s\n",result);
char srchex[((srcsize-1)*2)+1];
str2hex(srchex,src);
strcat(result,srchex);
strcpy(dest,result);
return 1;
char A[] = "/lol/meow";
char B[((sizeof(A)-1)*2)+3];
bzero(B,sizeof(B));
header(B,sizeof(B),A,sizeof(A));
printf("Result: %s\n", B);
}
/*///Header - Usage Example:
* unsigned char str[] = "/lol/meow/";
* unsigned char strhex[((strlen(str)-1)*2)+1];
* str2hex(strhex,str);
* unsigned char header_result[sizeof(strhex+2)]; // Extra 2 for size
* bzero(header_result, sizeof(header_result));
* header(header_result, strhex);
* printf("header - Result: %s\n", header_result);
* unsigned char header_path_result[strlen(header_result)-2];
*/
int header(unsigned char * dest, unsigned char * src)
{
if(!src)
{
return 0;
}
char size[3];
bzero(size,3);
strcpy(size, Int_To_Hex((strlen(src)/2)-1));
strcat(dest, size);
strcat(dest, src);
return 1;
}
/*
* //Header_Path - Usage Example
* header_path(header_path_result,header_result);
* printf("header_path - Result: %s\n",header_path_result);
*/
int header_path(unsigned char * dest, unsigned char * src)
{
if(!src)
{
return 0;
}
sprintf(dest,"%s",src+2);
return 1;
}
/*
* //Add Header - Usage Example:
* char continut[] = "1234";
* char continuthex[((sizeof(continut)-1)*2)+1];
* bzero(continuthex, sizeof(continuthex));
* str2hex(continuthex, continut);
* char cap[] = "/lol/";
* char caphex[((sizeof(cap)-1)*2)+1];
* bzero(caphex,sizeof(caphex));
* str2hex(caphex,cap);
* //printf("caphex = %s\n", caphex);
* //printf("conhex = %s\n", continuthex);
* char add_hdr_dest[sizeof(continuthex)-1+sizeof(caphex)-1+3];
* bzero(add_hdr_dest, sizeof(add_hdr_dest));
* add_header(add_hdr_dest, caphex,sizeof(caphex), continuthex, sizeof(continuthex));
* printf("add_header - Result: %s\n",add_hdr_dest);
*/
int add_header(unsigned char * dest,unsigned char * header,size_t headersize, unsigned char * content, size_t contentsize)
{
if(!header||!content)
{
return 0;
}
int realsize = (headersize-1+contentsize-1)/2;
char szhex[3];
bzero(szhex,3);
strcat(szhex, Int_To_Hex(realsize));
strcat(dest, szhex);
strcat(dest, header);
strcat(dest, content);
return 1;
}
/*//Remove Header - Usage Example:
* char remove_hdr_dst[1000]; //Much bigger than needed tbh..
* bzero(remove_hdr_dst,1000);
* remove_header(remove_hdr_dst, add_hdr_dest);
* printf("remove_header - Result: %s\n",remove_hdr_dst);
*/
int remove_header(unsigned char * dest, unsigned char * lel)
{
if(!lel)
{
return 0;
}
int init = 0;
char s[(strlen(lel)/2)+1];
int sizs = strlen(lel)/2+1;
hex2str(lel, s, sizs);
sprintf(s,"%s", s+1);
char * pch;
char * end;
pch = strtok_r(s,"/",&end);
int pos = 0;
while(pch)
{
//printf("PCH: %s\n", pch);
if(pos==1)
{
str2hex(dest, pch);
}
//sprintf(dest,"%s",pch);
pch = strtok_r(NULL,"/",&end);
pos=1;
}
return 1;
}
/* //getHeader
* char geth_dest[1000];
* bzero(geth_dest,1000);
* get_header(geth_dest, add_hdr_dest);
* printf("get_header - Result: %s\n", geth_dest);
*/
int get_header(char * dest, unsigned char * src)
{
if(!src)
{
return 0;
}
char ascii[strlen(src)/2];
hex2str(src, ascii,strlen(src)/2);
sprintf(ascii, "%s",ascii+1);
char * pch;
char * end;
pch = strtok_r(ascii,"/",&end);
while(pch)
{
strcat(dest,pch);
break;
}
return 1;
}
/*
* //getcontent
* char getc_dest[1000];
* bzero(getc_dest,1000);
* get_content(getc_dest, add_hdr_dest);
* printf("get_content - Result: %s\n", getc_dest);
*/
int get_content(char * dest, unsigned char * src)
{
if(!src)
{
return 0;
}
char ascii[strlen(src)/2];
hex2str(src, ascii,strlen(src)/2);
sprintf(ascii, "%s",ascii+1);
char * pch;
char * end;
int ax = 0;
pch = strtok_r(ascii,"/",&end);
while(pch)
{
//printf("PCH: %s", pch);
if(ax == 1)
{
strcat(dest,pch);
break;
}
ax=1;
pch = strtok_r(NULL,"/",&end);
}
return 1;
}
#endif