Commit 5352b6ab authored by Bhavesh Yadav's avatar Bhavesh Yadav

Added a few more functions in chord.c, Implemented getsockAddrFromIpAndPort

parent 553aa5b9
chord: chord.o utils.o
gcc chord.o utils.o -lcrypto -o chord
chord.o: chord.c
gcc -c chord.c
utils.o: utils.c
gcc -c utils.c
kvserver: kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o kvserver: kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o
gcc -o kvserver kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o -pthread gcc -o kvserver kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o -pthread
......
...@@ -9,9 +9,12 @@ ...@@ -9,9 +9,12 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <openssl/md5.h> #include <openssl/md5.h>
#include "utils.h"
#include <math.h>
#define MAXLOCATIONS 32 #define MAXLOCATIONS 32
#define MAXIDVALUE 65536 #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;
...@@ -37,29 +40,16 @@ int nodeToId(struct sockaddr_in *socketAddr){ ...@@ -37,29 +40,16 @@ int nodeToId(struct sockaddr_in *socketAddr){
typedef struct Node typedef struct Node
{ {
int nodeId; int nodeId;
char ip[16]; struct sockaddr_in socketAddr;
}Node; }Node;
typedef struct Finger
{
int nextId;
int nextNodeId;
char ip[16];
}Finger;
typedef struct Chord typedef struct Chord
{ {
int* finger; Node node;
int selfId; Node successor;
char selfIp[16]; Node predecessor;
int selfPort; Node *fingerTable;
int successor;
char successorIp[16];
int successorPort;
int predecessor;
char predecessorIp[16];
int predecessorPort;
}Chord; }Chord;
Chord chord; Chord chord;
...@@ -101,79 +91,85 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer) ...@@ -101,79 +91,85 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer)
void initChordStructure(char * joinIp){ void initChordStructure(struct sockaddr_in *joinNode){
chord.finger = (Finger *) malloc(log(MAXLOCATIONS)*sizeof(Finger)); chord.fingerTable = (Node *) malloc(log(MAXLOCATIONS)*sizeof(Node));
char ip[16] = getip(); char ip[16] = "190.11.111.11";//getip();
int port =4; int port = 199;
strcpy(chord.selfIp ,ip); getSocketFromIpAndPort(ip,port,&chord.node.socketAddr);
chord.selfId = nodeToId(ip,port); printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr));
chord.predecessor =-1; // strcpy(chord.selfIp ,ip);
if (joinIp==NULL) // chord.selfId = nodeToId(ip,port);
{ // chord.predecessor =-1;
chord.successor = chord.selfId; // if (joinIp==NULL)
} // {
else // chord.successor = chord.selfId;
{ // }
/* send find successor packet to the ip */ // else
// Listen for reply // {
// update successor // /* send find successor packet to the ip */
} // // Listen for reply
// // update successor
// }
} }
void closestPreceedingNode(int id, char ip[]){ int main() {
int m= log(MAXLOCATIONS); initChordStructure(NULL);
Finger* f=chord.finger;
for (int i = m-1; i >=0; i--)
{
int nextId = f[m].nextId;
if (nextId>chord.selfId && nextId<=id)
{
strcpy(ip,f[m].ip);
return;
}
}
strcpy(ip,f[0].ip); //????
} }
Node findSuccessor(int id, char ip[], int port, bool block){ // void closestPreceedingNode(int id, char ip[]){
Node n; // int m= log(MAXLOCATIONS);
n.nodeId=-1; // Finger* f=chord.finger;
if (id>=chord.selfId && id<=chord.successor) // for (int i = m-1; i >=0; i--)
{ // {
n.nodeId=chord.selfId; // int nextId = f[m].nextId;
strcpy(n.ip,chord.selfIp); // if (nextId>chord.selfId && nextId<=id)
if (block) // {
{ // strcpy(ip,f[m].ip);
// return;
// }
// }
// strcpy(ip,f[0].ip); //????
// }
// Node findSuccessor(int id, char ip[], int port, bool block){
// Node n;
// n.nodeId=-1;
// if (id>=chord.selfId && id<=chord.successor)
// {
// n.nodeId=chord.selfId;
// strcpy(n.ip,chord.selfIp);
// if (block)
// {
} // }
else // else
{ // {
return n; // return n;
} // }
} // }
else // else
{ // {
char preceedingIp[16]; // char preceedingIp[16];
closestPreceedingNode(id,preceedingIp); // closestPreceedingNode(id,preceedingIp);
char msg[1000],buffer[1000]; // char msg[1000],buffer[1000];
//make_packet and send // //make_packet and send
sendUDP(msg,ip,port,true,buffer); // sendUDP(msg,ip,port,true,buffer);
return n; // return n;
} // }
} // }
void sendPredecessor(char ip[], int port){ // void sendPredecessor(char ip[], int port){
int sockfd; // int sockfd;
char msg[1000]; // char msg[1000];
ToXML(msg,ip,port);//TO be changed // ToXML(msg,ip,port);//TO be changed
sendUDP(msg,ip,port,false,NULL); // sendUDP(msg,ip,port,false,NULL);
} // }
void stabilize(){ // void stabilize(){
char msg[1000],buffer[1000]; // char msg[1000],buffer[1000];
sendUDP(msg,chord.successorIp,chord.successorPort,true,buffer); // sendUDP(msg,chord.successorIp,chord.successorPort,true,buffer);
} // }
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "utils.h"
void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr) {
newSocketAddr->sin_family = AF_INET;
newSocketAddr->sin_port = htons(port);
newSocketAddr->sin_addr.s_addr = inet_addr(ip);
}
\ No newline at end of file
typedef struct sockaddr_in sockaddr_t;
void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr);
\ 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