Advertisement
jmacmcnerney

libsmall.cpp

Apr 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.55 KB | None | 0 0
  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.  
  12. int 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.  
  66. int 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.  
  117. int 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement