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