tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rcfileio.h (4083B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /*
      7 ** Class definitions for normal and special file I/O (ref: prio.h)
      8 */
      9 
     10 #if defined(_RCFILEIO_H)
     11 #else
     12 #define _RCFILEIO_H
     13 
     14 #include "rcio.h"
     15 #include "rctime.h"
     16 
     17 /*
     18 ** One would normally create a concrete class, such as RCFileIO, but then
     19 ** pass around more generic references, ie., RCIO.
     20 **
     21 ** This subclass of RCIO hides (makes private) the methods that are not
     22 ** applicable to normal files.
     23 */
     24 
     25 class RCFileInfo;
     26 
     27 class PR_IMPLEMENT(RCFileIO): public RCIO
     28 {
     29 public:
     30    RCFileIO();
     31    virtual ~RCFileIO();
     32 
     33    virtual PRInt64     Available();
     34    virtual PRStatus    Close();
     35    static  PRStatus    Delete(const char *name);
     36    virtual PRStatus    FileInfo(RCFileInfo* info) const;
     37    static  PRStatus    FileInfo(const char *name, RCFileInfo* info);
     38    virtual PRStatus    Fsync();
     39    virtual PRStatus    Open(const char *name, PRIntn flags, PRIntn mode);
     40    virtual PRInt32     Read(void *buf, PRSize amount);
     41    virtual PRInt64     Seek(PRInt64 offset, RCIO::Whence how);
     42    virtual PRInt32     Write(const void *buf, PRSize amount);
     43    virtual PRInt32     Writev(
     44        const PRIOVec *iov, PRSize size,
     45        const RCInterval& timeout);
     46 
     47 private:
     48 
     49    /* These methods made private are unavailable for this object */
     50    RCFileIO(const RCFileIO&);
     51    void operator=(const RCFileIO&);
     52 
     53    RCIO*       Accept(RCNetAddr* addr, const RCInterval& timeout);
     54    PRInt32     AcceptRead(
     55        RCIO **newfd, RCNetAddr **address, void *buffer,
     56        PRSize amount, const RCInterval& timeout);
     57    PRStatus    Bind(const RCNetAddr& addr);
     58    PRStatus    Connect(const RCNetAddr& addr, const RCInterval& timeout);
     59    PRStatus    GetLocalName(RCNetAddr *addr) const;
     60    PRStatus    GetPeerName(RCNetAddr *addr) const;
     61    PRStatus    GetSocketOption(PRSocketOptionData *data) const;
     62    PRStatus    Listen(PRIntn backlog);
     63    PRInt16     Poll(PRInt16 in_flags, PRInt16 *out_flags);
     64    PRInt32     Recv(
     65        void *buf, PRSize amount, PRIntn flags,
     66        const RCInterval& timeout);
     67    PRInt32     Recvfrom(
     68        void *buf, PRSize amount, PRIntn flags,
     69        RCNetAddr* addr, const RCInterval& timeout);
     70    PRInt32     Send(
     71        const void *buf, PRSize amount, PRIntn flags,
     72        const RCInterval& timeout);
     73    PRInt32     Sendto(
     74        const void *buf, PRSize amount, PRIntn flags,
     75        const RCNetAddr& addr,
     76        const RCInterval& timeout);
     77    PRStatus    SetSocketOption(const PRSocketOptionData *data);
     78    PRStatus    Shutdown(RCIO::ShutdownHow how);
     79    PRInt32     TransmitFile(
     80        RCIO *source, const void *headers,
     81        PRSize hlen, RCIO::FileDisposition flags,
     82        const RCInterval& timeout);
     83 public:
     84 
     85    /*
     86    ** The following function return a valid normal file object,
     87    ** Such objects can be used for scanned input and console output.
     88    */
     89    typedef enum {
     90        input = PR_StandardInput,
     91        output = PR_StandardOutput,
     92        error = PR_StandardError
     93    } SpecialFile;
     94 
     95    static RCIO *GetSpecialFile(RCFileIO::SpecialFile special);
     96 
     97 };  /* RCFileIO */
     98 
     99 class PR_IMPLEMENT(RCFileInfo): public RCBase
    100 {
    101 public:
    102    typedef enum {
    103        file = PR_FILE_FILE,
    104        directory = PR_FILE_DIRECTORY,
    105        other = PR_FILE_OTHER
    106    } FileType;
    107 
    108 public:
    109    RCFileInfo();
    110    RCFileInfo(const RCFileInfo&);
    111 
    112    virtual ~RCFileInfo();
    113 
    114    PRInt64 Size() const;
    115    RCTime CreationTime() const;
    116    RCTime ModifyTime() const;
    117    RCFileInfo::FileType Type() const;
    118 
    119    friend PRStatus RCFileIO::FileInfo(RCFileInfo*) const;
    120    friend PRStatus RCFileIO::FileInfo(const char *name, RCFileInfo*);
    121 
    122 private:
    123    PRFileInfo64 info;
    124 };  /* RCFileInfo */
    125 
    126 inline RCFileInfo::RCFileInfo(): RCBase() { }
    127 inline PRInt64 RCFileInfo::Size() const {
    128    return info.size;
    129 }
    130 
    131 #endif /* defined(_RCFILEIO_H) */