Commit 553aa5b9 authored by Bhavesh Yadav's avatar Bhavesh Yadav

Improved hash function and added nodetoId function

parent 0b9c16f2
...@@ -11,28 +11,26 @@ ...@@ -11,28 +11,26 @@
#include <openssl/md5.h> #include <openssl/md5.h>
#define MAXLOCATIONS 32 #define MAXLOCATIONS 32
#define MAXIDVALUE 65536
int keyToId(char * key){ int keyToId(char * key){
unsigned char digest[16]; unsigned char digest[16];
MD5_CTX context; MD5_CTX context;
unsigned intHashValue;
unsigned char *hexVal;
MD5_Init(&context); MD5_Init(&context);
MD5_Update(&context, key, strlen(key)); MD5_Update(&context, key, strlen(key));
MD5_Final(digest, &context); MD5_Final(digest, &context);
hexVal = malloc(sizeof(char)); int intHashValue;
int twoDigits; int first8bits = digest[0];
for(int i =0; i<2;i++){ first8bits = first8bits<<8;
sprintf(hexVal+i,"%02X",digest[i]); intHashValue = first8bits + digest[1];
sscanf(hexVal+i,"%x",&twoDigits);
intHashValue = intHashValue*1000 + twoDigits; // The two digits can also have 3 numerical digits hence *1000
}
return intHashValue; return intHashValue;
} }
int nodeToId(char ip[], int port){ int nodeToId(struct sockaddr_in *socketAddr){
//To be filled char *ip;
int id = 1; char port[6];
int portNumber = socketAddr->sin_port;
ip = inet_ntoa(socketAddr->sin_addr);
int id = (keyToId(ip)+portNumber)%(MAXIDVALUE);
return id; return id;
} }
......
...@@ -19,18 +19,39 @@ int keyToId(char * key){ ...@@ -19,18 +19,39 @@ int keyToId(char * key){
MD5_Init(&context); MD5_Init(&context);
MD5_Update(&context, key, strlen(key)); MD5_Update(&context, key, strlen(key));
MD5_Final(digest, &context); MD5_Final(digest, &context);
unsigned intHashValue; int intHashValue;
unsigned char *hexVal; int first8bits = digest[0];
hexVal = malloc(sizeof(char)); first8bits = first8bits<<8;
int TwoDigits; intHashValue = first8bits + digest[1];
for(int i =0; i<2;i++){ return intHashValue;
sprintf(hexVal+i,"%02X",digest[i]); }
sscanf(hexVal+i,"%x",&TwoDigits);
intHashValue = intHashValue*1000 + TwoDigits; int nodeToId(struct sockaddr_in *socketAddr){
} char *ip;
printf("%d\n",intHashValue); char port[6];
int portNumber = socketAddr->sin_port;
ip = inet_ntoa(socketAddr->sin_addr);
int id = (keyToId(ip)+portNumber)%(65536);
return id;
} }
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
int sockfd;
struct sockaddr_in servaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
// Filling server information
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("190.11.11.10");
nodeToId(&servaddr);
keyToId(argv[1]); keyToId(argv[1]);
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment