· 7 years ago · Apr 23, 2018, 03:54 AM
1#include "libsmall.hpp"
2
3//localhost define
4#define localhost "127.0.0.1"
5//bytes needed as specified in project specs
6#define TYPE 4
7#define PADDIN 6
8#define NTERM 8
9#define SETVALUELEN 23
10#define SETVAL 26
11
12int smallSet(char *MachineName, int port, int SecretKey, char *variableName, char *value, int dataLength) {
13 //connection to server
14 int sock = 0;
15 struct sockaddr_in server_address;
16 sock = socket(AF_INET, SOCK_STREAM, 0);
17 if (socket < 0) {
18 cerr << "Error" << endl;
19 return -1;
20 }
21
22 server_address.sin_family = AF_INET;
23 server_address.sin_port = htons(port);
24
25 //sets MachineName to 127.0.0.1 if "localhost" is entered by user
26 int localhostCheck = strcmp(MachineName, "localhost");
27 if (!localhostCheck) {
28 strcpy(MachineName, localhost);
29 }
30
31 //returns errors uopon unsuccessful connection
32 if (inet_pton(AF_INET, MachineName, &server_address.sin_addr) <= 0) {
33 cerr << "Error" << endl;
34 return -1;
35 }
36 if (connect(sock, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
37 cerr << "Error" << endl;
38 return -1;
39 }
40 //sends variable set to server, doing all appropriate byte allocations
41 char buffer[128];
42 //checks secretkey
43 SecretKey = htonl(SecretKey);
44 memcpy(buffer, (char*)&SecretKey, sizeof(int));
45 //determines what program to run
46 short type = htons(0);
47 //buffer for type (set, get, digest, run)
48 memcpy(buffer + TYPE, (char*)&type, sizeof(type));
49 short pad = 0;
50 //arbitrary padding
51 memcpy(buffer + PADDIN, (char*)&pad, sizeof(pad));
52 //null terminated variable name, sets last character to null terminating character
53 buffer[NTERM + strlen(variableName)] = '\0';
54 strncpy(buffer + NTERM, variableName, strlen(variableName));
55 short dlen = htons((short)dataLength);
56 memcpy(buffer + SETVALUELEN, (char*)&dlen, sizeof(dlen));
57 strncpy(buffer + SETVAL, value, strlen(value));
58 buffer[SETVAL + strlen(value)] = '\0';
59 //sends info
60 send(sock, buffer, sizeof(buffer), 0);
61 char ret;
62 read(sock, &ret, 1);
63 return ret;
64}
65
66int smallGet(char *MachineName, int port, int SecretKey, char *variableName) {
67 //see comments above for repeated code
68 int sock = 0;
69 struct sockaddr_in server_address;
70 sock = socket(AF_INET, SOCK_STREAM, 0);
71 if (socket < 0) {
72 cerr << "Error" << endl;
73 return -1;
74 }
75
76 server_address.sin_family = AF_INET;
77 server_address.sin_port = htons(port);
78
79 int localhostCheck = strcmp(MachineName, "localhost");
80 if (!localhostCheck) {
81 strcpy(MachineName, localhost);
82 }
83
84 if (inet_pton(AF_INET, MachineName, &server_address.sin_addr) <= 0) {
85 cerr << "Error" << endl;
86 return -1;
87 }
88 if (connect(sock, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
89 cerr << "Error" << endl;
90 return -1;
91 }
92 char buffer[128];
93 SecretKey = htonl(SecretKey);
94 memcpy(buffer, (char*)&SecretKey, sizeof(int));
95 short type = htons(1);
96 memcpy(buffer + TYPE, (char*)&type, sizeof(type));
97 short pad = 0;
98 memcpy(buffer + PADDIN, (char*)&pad, sizeof(pad));
99 buffer[NTERM + strlen(variableName)] = '\0';
100 strncpy(buffer + NTERM, variableName, strlen(variableName));
101 variableName[strlen(variableName)] = '\0';
102 send(sock, buffer, sizeof(buffer), 0);
103 //sends value of get and displays it
104 char ret;
105 read(sock, &ret, 1);
106 int padding;
107 read(sock, &padding, 3);
108 short len;
109 read(sock, &len, sizeof(short));
110 len = ntohs(len);
111 char result[100];
112 read(sock, &result, len);
113 cout << string(result) << endl;
114 return ret;
115}
116
117int smallDigest(char *MachineName, int port, int SecretKey, char *data, int dataLength) {
118 int sock = 0;
119 struct sockaddr_in server_address;
120 sock = socket(AF_INET, SOCK_STREAM, 0);
121 if (socket < 0) {
122 cerr << "Error" << endl;
123 return -1;
124 }
125
126 server_address.sin_family = AF_INET;
127 server_address.sin_port = htons(port);
128
129 int localhostCheck = strcmp(MachineName, "localhost");
130 if (!localhostCheck) {
131 strcpy(MachineName, localhost);
132 }
133
134 if (inet_pton(AF_INET, MachineName, &server_address.sin_addr) <= 0) {
135 cerr << "Error" << endl;
136 return -1;
137 }
138 if (connect(sock, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
139 cerr << "Error" << endl;
140 return -1;
141 }
142 char buffer[128];
143 SecretKey = htonl(SecretKey);
144 memcpy(buffer, (char*)&SecretKey, sizeof(int));
145 short type = htons(2);
146 memcpy(buffer + TYPE, (char*)&type, sizeof(type));
147 short pad = 0;
148 memcpy(buffer + PADDIN, (char*)&pad, sizeof(pad));
149 short dlen = htons((short)dataLength);
150 memcpy(buffer + NTERM, (char*)&dlen, sizeof(dlen));
151 send(sock, buffer, sizeof(buffer), 0);
152 char ret;
153 read(sock, &ret, 1);
154 return ret;
155}