/
client_stub.c
120 lines (112 loc) · 3.71 KB
/
client_stub.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
//#include "network_client-private.h"
#include "inet.h"
#include "client_stub.h"
#include "client_stub-private.h"
#include "list.h"
#include "list-private.h"
#include "table.h"
#include <errno.h>
#define MAX_MSG 1024
/*
*client_stub.c
*Andre Rocha
*ad007
*/
struct rtable_t *rtable_bind(const char *address_port){
struct rtable_t *rtable = (struct rtable_t*)malloc(sizeof(struct rtable_t));
rtable->msg = (struct message_t*)malloc(sizeof(struct message_t));
rtable->server = (struct server_t*)malloc(sizeof(struct server_t));
rtable->server = network_connect(address_port);
return rtable;
}
int rtable_unbind(struct rtable_t *rtable){
network_close(rtable->server);
}
int rtable_put(struct rtable_t *rtable, char *key, struct data_t *data){
int result;
struct data_t *NovaData=(struct data_t*)malloc(sizeof(struct data_t));
NovaData=data_create2(strlen(data),data);
struct entry_t *entry=(struct entry_t*)malloc(sizeof(struct entry_t));
entry = entry_create(key, NovaData);
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
msg->opcode = OC_PUT;
msg->c_type = CT_ENTRY;
msg->content.entry=entry;
//network_send_receive(rtable->server, msg);
if( network_send_receive(rtable->server, msg)->opcode==OC_PUT+1){ //testar se foi colocado efectivamente no servidor
result=1;
} else {
result = -1;
}
return result;
}
int rtable_conditional_put(struct rtable_t *rtable, char *key, struct data_t *data){
int result;
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
struct entry_t *entry=(struct entry_t*)malloc(sizeof(struct entry_t));
entry = entry_create(key, data);
msg->opcode = OC_COND_PUT;
msg->c_type = CT_ENTRY;
msg->content.entry=entry;
if(network_send_receive(rtable->server, msg)->opcode==OC_COND_PUT+1){ //testar se foi colocado efectivamente no servidor
result=1;
} else {
result = -1;
}
return result;
}
struct data_t *rtable_get(struct rtable_t *rtable, char *key){
int result;
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
msg->opcode = OC_GET;
msg->c_type = CT_KEY;
msg->content.key = (char*)malloc(sizeof(char));
msg->content.key=key;
if(network_send_receive(rtable->server, msg)->opcode==OC_GET+1){
return (network_send_receive(rtable->server, msg)->content.value->data);
}else{
result = -1;
}
return result;
}
int rtable_del(struct rtable_t *rtable, char *key){
int result;
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
msg->opcode = OC_DEL;
msg->c_type = CT_KEY;
msg->content.key = (char*)malloc(sizeof(char));
msg->content.key=key;
if(network_send_receive(rtable->server, msg)->opcode==OC_DEL+1){
result = 1;
}else{
result = -1;
}
return result;
}
int rtable_size(struct rtable_t *rtable){
int result;
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
msg->opcode = OC_SIZE;
msg->c_type = CT_RESULT;
msg->content.result = 0;
if(network_send_receive(rtable->server, msg)->opcode==OC_SIZE+1){ //testar se foi colocado efectivamente no servidor
result = (network_send_receive(rtable->server, msg)->content.result);
} else {
result = -1;
}
return result;
}
char **rtable_get_keys(struct rtable_t *rtable){
int result;
char **keys;
struct message_t *msg = (struct message_t*)malloc(sizeof(struct message_t));
msg->opcode = OC_GET_KEYS;
msg->c_type = CT_RESULT;
if(network_send_receive(rtable->server, msg)->opcode==OC_GET_KEYS+1){
return (network_send_receive(rtable->server, msg)->content.keys);
} else {
result = -1;
return result;
}
}