· 7 years ago · Apr 23, 2018, 03:12 AM
1#include "smLib.h"
2#include <stdio.h>
3#include <iostream>
4#include <stdlib.h>
5
6using namespace std;
7
8const int GET_RESPONSE_FIXED = 6;
9const int SET_REQUEST_FIXED = 26;
10
11int smallSet(char * MachineName, int port, int SecretKey, char * variableName,
12 char * value, int dataLength){
13 rio_t rio;
14 int clientfd;
15
16 init_request initSet;
17 set_request setRequest;
18
19 initSet.two_b_pad[0] = '\0';
20 initSet.two_b_pad[1] = '\0';
21
22 // initialize setRequest
23 initSet.secretKey = htonl(SecretKey);
24 initSet.requestType = htons(0);
25
26 // string initialization step
27 value[dataLength] = '\0';
28 setRequest.value[dataLength] = '\0';
29 strcpy(setRequest.varName, variableName);
30 strcpy(setRequest.value, value);
31 setRequest.valLength = htons(dataLength);
32
33 // begin Rio library communications
34 clientfd = Open_clientfd(MachineName, port);
35 Rio_readinitb(&rio, clientfd);
36
37 Rio_writen(clientfd, &initSet, sizeof(init_request));
38 Rio_writen(clientfd, &setRequest, 19+dataLength);
39
40 Close(clientfd); //line:netp:echoclient:close
41 exit(0);
42 }
43
44 int smallGet(char * MachineName, int port, int SecretKey, char * variableName,
45 char * value, int *resultLength){
46 rio_t rio;
47 int clientfd;
48 init_request initRequest;
49 get_request getRequest;
50 init_response getResponse;
51
52 initRequest.secretKey = htonl(SecretKey);
53 initRequest.requestType = htons(1);
54 strcpy(getRequest.varName, variableName);
55
56 clientfd = Open_clientfd(MachineName, port);
57 Rio_readinitb(&rio, clientfd);
58
59 Rio_writen(clientfd, &initRequest, 8);
60 Rio_writen(clientfd, &getRequest, 16);
61
62 read(clientfd, &getResponse, 6);
63
64 *resultLength = ntohs(getResponse.valLength);
65 read(clientfd, &getResponse.value, (*resultLength)-1);
66 cout << getResponse.value << endl;
67
68 Close(clientfd);
69 exit(0);
70}