File: fileToServer.cpp

package info (click to toggle)
libaria 2.8.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 13,628 kB
  • ctags: 16,574
  • sloc: cpp: 135,490; makefile: 925; python: 597; java: 570; ansic: 182
file content (155 lines) | stat: -rw-r--r-- 3,381 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "Aria.h"
#include "ArNetworking.h"

ArClientFileLister *fileLister;
ArClientFileToClient *fileToClient;
ArClientFileFromClient *fileFromClient;
ArClientDeleteFileOnServer *deleteFileOnServer;

bool done = false;

void updated(int ret)
{
  done = true;
  if (ret == 0)
    fileLister->log(false);
  else
    printf("Bad update %d\n", ret);
}

void fileReceived(int ret)
{
  done = true;
  if (ret == 0)
    printf("Got file '%s'\n", fileToClient->getFileName());
  else
    printf("Didn't get file '%s' because %d\n", fileToClient->getFileName(), 
	   ret);
}

void fileSent(int ret)
{
  done = true;
  if (ret == 0)
    printf("Sent file '%s'\n", fileFromClient->getFileName());
  else
    printf("Didn't send file '%s' because %d\n", 
	   fileFromClient->getFileName(), 
	   ret);
}

void fileDeleted(int ret)
{
  done = true;
  if (ret == 0)
    printf("Deleted file '%s'\n", deleteFileOnServer->getFileName());
  else
    printf("Didn't delete file '%s' because %d\n", 
	   deleteFileOnServer->getFileName(), 
	   ret);
}

void waitForDone(void)
{
  while (!done && Aria::getRunning())
    ArUtil::sleep(1);
  done = false;
}

int main(int argc, char **argv)
{
  std::string hostname;
  Aria::init();
  //ArLog::init(ArLog::StdOut, ArLog::Verbose);
  ArClientBase client;


  ArArgumentParser parser(&argc, argv);

  ArClientSimpleConnector clientConnector(&parser);
  
  parser.loadDefaultArguments();

  ArClientFileFromClient::SendSpeed speed = ArClientFileFromClient::SPEED_AUTO;


  if (parser.checkArgument("-speed_fast"))
  {
    ArLog::log(ArLog::Normal, "Putting file with speed_fast");
    speed = ArClientFileFromClient::SPEED_FAST;
  }
  else if (parser.checkArgument("-speed_slow"))
  {
    ArLog::log(ArLog::Normal, "Putting file with speed_slow");
    speed = ArClientFileFromClient::SPEED_SLOW;
  }
  else
  {
    ArLog::log(ArLog::Normal, "Putting file with speed_auto");
  }

  bool pauseAfterSend;

  if (parser.checkArgument("-pauseAfterSend"))
  {
    ArLog::log(ArLog::Normal, "Will pause after send");
    pauseAfterSend = true;
  }
  else
  {
    ArLog::log(ArLog::Normal, "Will not pause after send");
    pauseAfterSend = false;
  }

  /* Check for -help, and unhandled arguments: */
  if (!Aria::parseArgs() || !parser.checkHelpAndWarnUnparsed(1) ||
      parser.getArgc() <= 1)
  {
    ArLog::log(ArLog::Normal, "%s <fileName> [-speed_fast] [-speed_slow] [-pauseAfterSend]",
	       argv[0]);
    ArLog::log(ArLog::Normal, "Default send speed is speed_auto");
    ArLog::log(ArLog::Normal, "");
    Aria::logOptions();
    exit(0);
  }

  const char *fileName = parser.getArg(1);

  

  /* Connect our client object to the remote server: */
  if (!clientConnector.connectClient(&client))
  {
    if (client.wasRejected())
      printf("Server '%s' rejected connection, exiting\n", client.getHost());
    else
      printf("Could not connect to server '%s', exiting\n", client.getHost());
    exit(1);
  } 

  fileFromClient = new ArClientFileFromClient(&client);
  fileFromClient->addFileSentCallback(
	  new ArGlobalFunctor1<int>(&fileSent));

  client.runAsync();

  done = false;
  if (!fileFromClient->putFileToDirectory(NULL, fileName, fileName,
					  speed))
  {
    printf("Error before sending file\n");
    Aria::exit(1);
  }

  waitForDone();

  if (pauseAfterSend)
    ArUtil::sleep(10000);

  Aria::exit(0);
  return 255;
}