qmsk/net/transport/__init__.py
author Tero Marttila <terom@fixme.fi>
Sat, 26 Sep 2009 16:39:20 +0300
changeset 50 da394bb715af
parent 32 2168a9ffaef7
permissions -rw-r--r--
try and keep lib.event2.event objects alive (via self-ref) while pending
24
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Transport-layer functionality.
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
28
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
     4
    This implements the core TCP/UDP/SCTP functionality, plus relevant transport/application layer stuff like TLS, SOCKS, SSH-channels, etc.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
     5
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
     6
    XXX: non-blocking interface?
26
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     7
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     8
    Firstly, this defines a set of abstract interfaces that model the actual implementation as built on top of the
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     9
    socket packages's network-layer implementation:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    10
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    11
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    12
    Interfaces:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    13
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    14
        Transport           - very abstract interface that embodies the notion of sending something somewhere
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    15
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    16
            ConnectedTransport      - connection-oriented transport
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    17
            
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    18
                Stream                  - connection-oriented full-duplex byte stream (reliable, sequenced)
28
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    19
                    
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    20
                    BufferedStream          - buffered version of the above
26
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    21
    
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    22
                PacketStream            - connection-oriented full-duplex packet-oriented communication
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    23
 
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    24
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    25
            UnconnectedTransport    - non-connection-oriented transport dealing with packets
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    26
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    27
                Peer                    - connectionless packet-oriented communication
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    28
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    29
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    30
        Endpoint        - some transport-level endpoint (local/remote address/socket)
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    31
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    32
32
2168a9ffaef7 transport.endpoint stuff
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    33
        Client          - connection-oriented endpoint that can establish a Transport to some remote Service
2168a9ffaef7 transport.endpoint stuff
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    34
2168a9ffaef7 transport.endpoint stuff
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    35
        Service         - listening endpoint that recieves connections from remote Clients and represents those as Transports
26
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    36
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    37
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    38
    Next, there are some mid-level helpers, mostly for dealing with 
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    39
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    40
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    41
    Then there is are implementations of these interfaces for specific protocols, layering on top of the socket module,
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    42
    or other application-level protocols.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    43
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    44
    TCP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    45
        TCP implementation using a SOCK_STREAM socket.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    46
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    47
        Stream          - connected TCP socket with TCP's byte stream semantics
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    48
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    49
        Service         - TCP socket accept()'ing Streams from remote Clients
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    50
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    51
        Client          - TCP socket connect()'ing to a remote Service
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    52
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    53
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    54
    UDP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    55
        UDP implementation using a SOCK_DGRAM socket.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    56
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    57
        Peer            - bind()'d UDP socket without any connection
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    58
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    59
        Client          - connect()'d UDP socket, representing a PacketStream
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    60
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    61
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    62
    UNIX:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    63
        UNIX socket implementation support both SOCK_STREAM and SOCK_DGRAM.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    64
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    65
        XXX: verify that this is correct...
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    66
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    67
        Stream          - connected AF_UNIX SOCK_STREAM
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    68
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    69
        Service         - accept()'ing AF_UNIX socket of either SOCK_STREAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    70
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    71
        Client          - connect()'ing AF_UNIX socket of SOCK_STREAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    72
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    73
        Peer            - bind()'d AF_UNIX socket of SOCK_DGRAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    74
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    75
    SCTP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    76
        SCTP implementation offering both SOCK_SEQPACKET and SOCK_STREAM -based socket interfaces.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    77
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    78
        Stream          - a PacketStream carried by an Association
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    79
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    80
        Association     - a Transport that represents a SCTP association between a local and remote Endpoint
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    81
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    82
        Peer            - one-to-many style interface, with a single Peer holding multiple Associations
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    83
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    84
        Service         - a one-to-one style listen()'ing interface which accepts Associations from remote Endpoints
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    85
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    86
        Client          - a one-to-one style connect()'ing interface which establishes Associations with remote Endpoints
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    87
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    88
    SSL:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    89
        SSL implementation using either OpenSSL or gnutls.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    90
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    91
        Stream          - tcp.Stream carrying an encrypted byte stream
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    92
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    93
        Service         - tcp.Service accepting connections from SSL endpoints
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    94
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    95
        Client          - tcp.Client connecting to an SSL service
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    96
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    97
    SOCKS:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    98
        SOCKSv5 client implementing TCP client serviecs.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    99
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   100
        Stream          - tcp.Stream carried over a SOCKSv5 connections
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   101
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   102
        Client          - tcp.Client connecting via a SOCKSv5 server
28
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   103
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   104
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   105
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   106
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   107
    TODO:
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   108
        * implement the above
24
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
"""