Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 16th, 2012  |  syntax: C++  |  size: 2.43 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <arpa/inet.h>
  2. #include <ctype.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/poll.h>
  8. #include <sys/socket.h>
  9. #include <sys/types.h>
  10. #include <time.h>
  11. #include <unistd.h>
  12.  
  13. #include "hsosstp.h"
  14.  
  15. int main(int argc, char* argv[]) {
  16.         int serverSocket, chunkSize, sessionId, m;
  17.         unsigned short int command;
  18.         struct sockaddr_in serverAddress;
  19.         char buffer[HSOSSTP_CHUNK_MAX_SIZE + HSOSSTP_COMMANDLENGTH + 10 + 2 + 1], * param1, * param2,
  20.                  request[HSOSSTP_COMMANDLENGTH + 10 + 2 + 1];
  21.         FILE *file;
  22.  
  23.  
  24.         if (argc == 1) {
  25.                 puts("Give filename and chunksize");
  26.                 return 0;
  27.         }
  28.         else if (argc == 2) {
  29.                 puts("Give chunksize");
  30.                 return 0;
  31.         }
  32.  
  33.         memset((void*)&serverAddress, '\0', sizeof(serverAddress));
  34.         serverSocket = socket(AF_INET, SOCK_STREAM, 0);
  35.         serverAddress.sin_family          = AF_INET;
  36.         serverAddress.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  37.         serverAddress.sin_port            = htons(HSOSSTP_SERVER_PORT);
  38.  
  39.         file = fopen(argv[1], "a");
  40.         chunkSize = atoi(argv[2]);
  41.  
  42.         if (chunkSize <= 0) {
  43.                 puts("Chunksize must be larger than 0");
  44.                 return 0;
  45.         }
  46.  
  47.         if (argc > 3) {
  48.                 serverAddress.sin_addr.s_addr = inet_addr(argv[3]);
  49.         }
  50.  
  51.  
  52.         if (connect(serverSocket, (const struct sockaddr*)&serverAddress, (socklen_t)sizeof(serverAddress)) < 0) {
  53.                 puts("Could not connect to server");
  54.                 return 0;
  55.         }
  56.  
  57.         m = sprintf(request, "HSOSSTP_INITX;%d;%s", chunkSize, argv[1]);
  58.         if (send(serverSocket, request, m + 1, 0) < 0) {
  59.                 puts("Error writing to server");
  60.                 return 0;
  61.         }
  62.         if (recv(serverSocket, buffer, sizeof(buffer), 0) < 0) {
  63.                 puts("Could not read from server");
  64.                 return 0;
  65.         }
  66.  
  67.         puts("Connected to server, starting session");
  68.         command = parse(buffer, &param1, &param2);
  69.         if (command != HSOSSTP_COMMAND_SIDXX) {
  70.                 puts("Error starting session");
  71.                 return 0;
  72.         }
  73.         printf("Started Session, ID: %s\n", param1);
  74.         sessionId = atoi(param1);
  75.  
  76.  
  77.         puts("Starting data transfer");
  78.         m = sprintf(request, "HSOSSTP_GETXX;%d", sessionId);
  79.         while ((send(serverSocket, request, m + 1, 0) > 0) && (recv(serverSocket, buffer, sizeof(buffer), 0) > 0)) {
  80.                 command = parse(buffer, &param1, &param2);
  81.                 if ((command == HSOSSTP_COMMAND_DATAX) && (param2 != NULL)) {
  82.                         fwrite(param2, strlen(param2), 1, file);
  83.                 }
  84.                 else if (command == HSOSSTP_COMMAND_ERROR) {
  85.                         puts("Error");
  86.                 }
  87.                 memset(buffer, '\0', sizeof(buffer));
  88.                 param1 = param2 = NULL;
  89.         }
  90.  
  91.  
  92.         fclose(file);
  93.         return 0;
  94. }