]> git.saurik.com Git - apt.git/blob - methods/rsh.h
9ca14425f8a6168de5a5e8fe9a24b8eb39cb31a1
[apt.git] / methods / rsh.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/// $Id: rsh.h,v 1.4 2002/11/09 23:33:26 doogie Exp $
3 // $Id: rsh.h,v 1.4 2002/11/09 23:33:26 doogie Exp $
4 /* ######################################################################
5
6 RSH method - Transfer files via rsh compatible program
7
8 ##################################################################### */
9 /*}}}*/
10 #ifndef APT_RSH_H
11 #define APT_RSH_H
12
13 #include <string>
14 #include <time.h>
15
16 #include <apt-pkg/strutl.h>
17
18 class Hashes;
19 class FileFd;
20
21 class RSHConn
22 {
23 char Buffer[1024*10];
24 unsigned long Len;
25 int WriteFd;
26 int ReadFd;
27 URI ServerName;
28
29 // Private helper functions
30 bool ReadLine(std::string &Text);
31
32 public:
33
34 pid_t Process;
35
36 // Raw connection IO
37 bool WriteMsg(std::string &Text,bool Sync,const char *Fmt,...);
38 bool Connect(std::string Host, std::string User);
39 bool Connect(std::string Host, unsigned int Port, std::string User);
40 bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
41
42 // Connection control
43 bool Open();
44 void Close();
45
46 // Query
47 bool Size(const char *Path,unsigned long long &Size);
48 bool ModTime(const char *Path, time_t &Time);
49 bool Get(const char *Path,FileFd &To,unsigned long long Resume,
50 Hashes &Hash,bool &Missing, unsigned long long Size);
51
52 RSHConn(URI Srv);
53 ~RSHConn();
54 };
55
56 #include <apt-pkg/acquire-method.h>
57 #include "aptmethod.h"
58
59 class RSHMethod : public aptMethod
60 {
61 std::string const Prog;
62 virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
63 virtual bool Configuration(std::string Message) APT_OVERRIDE;
64
65 RSHConn *Server;
66
67 static std::string FailFile;
68 static int FailFd;
69 static time_t FailTime;
70 static APT_NORETURN void SigTerm(int);
71
72 public:
73
74 RSHMethod(std::string const &Prog);
75 };
76
77 #endif