Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <arpa/inet.h>
- #include <ctype.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/poll.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <time.h>
- #include <unistd.h>
- #include "hsosstp.h"
- int main(int argc, char* argv[]) {
- int serverSocket, chunkSize, sessionId, m;
- unsigned short int command;
- struct sockaddr_in serverAddress;
- char buffer[HSOSSTP_CHUNK_MAX_SIZE + HSOSSTP_COMMANDLENGTH + 10 + 2 + 1], * param1, * param2,
- request[HSOSSTP_COMMANDLENGTH + 10 + 2 + 1];
- FILE *file;
- if (argc == 1) {
- puts("Give filename and chunksize");
- return 0;
- }
- else if (argc == 2) {
- puts("Give chunksize");
- return 0;
- }
- memset((void*)&serverAddress, '\0', sizeof(serverAddress));
- serverSocket = socket(AF_INET, SOCK_STREAM, 0);
- serverAddress.sin_family = AF_INET;
- serverAddress.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- serverAddress.sin_port = htons(HSOSSTP_SERVER_PORT);
- file = fopen(argv[1], "a");
- chunkSize = atoi(argv[2]);
- if (chunkSize <= 0) {
- puts("Chunksize must be larger than 0");
- return 0;
- }
- if (argc > 3) {
- serverAddress.sin_addr.s_addr = inet_addr(argv[3]);
- }
- if (connect(serverSocket, (const struct sockaddr*)&serverAddress, (socklen_t)sizeof(serverAddress)) < 0) {
- puts("Could not connect to server");
- return 0;
- }
- m = sprintf(request, "HSOSSTP_INITX;%d;%s", chunkSize, argv[1]);
- if (send(serverSocket, request, m + 1, 0) < 0) {
- puts("Error writing to server");
- return 0;
- }
- if (recv(serverSocket, buffer, sizeof(buffer), 0) < 0) {
- puts("Could not read from server");
- return 0;
- }
- puts("Connected to server, starting session");
- command = parse(buffer, ¶m1, ¶m2);
- if (command != HSOSSTP_COMMAND_SIDXX) {
- puts("Error starting session");
- return 0;
- }
- printf("Started Session, ID: %s\n", param1);
- sessionId = atoi(param1);
- puts("Starting data transfer");
- m = sprintf(request, "HSOSSTP_GETXX;%d", sessionId);
- while ((send(serverSocket, request, m + 1, 0) > 0) && (recv(serverSocket, buffer, sizeof(buffer), 0) > 0)) {
- command = parse(buffer, ¶m1, ¶m2);
- if ((command == HSOSSTP_COMMAND_DATAX) && (param2 != NULL)) {
- fwrite(param2, strlen(param2), 1, file);
- }
- else if (command == HSOSSTP_COMMAND_ERROR) {
- puts("Error");
- }
- memset(buffer, '\0', sizeof(buffer));
- param1 = param2 = NULL;
- }
- fclose(file);
- return 0;
- }
Add Comment
Please, Sign In to add comment