qmsk/net/transport/__init__.py
author Tero Marttila <terom@fixme.fi>
Wed, 19 Aug 2009 00:12:07 +0300
changeset 26 d8a71a675862
parent 24 f18b5787c46c
child 28 020c89baaa33
permissions -rw-r--r--
some abstract shit
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
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
    This implements TCP/UDP/SCTP functionality, plus relevant Transport-Application layer stuff like TLS, SOCKS, SSH-channels, etc.
26
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     5
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     6
    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
     7
    socket packages's network-layer implementation:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     8
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
     9
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    10
    Interfaces:
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
        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
    13
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    14
            ConnectedTransport      - connection-oriented transport
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
                Stream                  - connection-oriented full-duplex byte stream (reliable, sequenced)
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
                PacketStream            - connection-oriented full-duplex packet-oriented communication
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    19
 
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    20
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    21
            UnconnectedTransport    - non-connection-oriented transport dealing with packets
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    22
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    23
                Peer                    - connectionless packet-oriented communication
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
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    26
        Endpoint        - some transport-level endpoint (local/remote address/socket)
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    27
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    28
            Client          - connection-oriented endpoint that can establish a Transport to some remote Service
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
            Service         - listening endpoint that recieves connections from remote Clients and represents those as Transports
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
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    33
    Next, there are some mid-level helpers, mostly for dealing with 
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    34
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    35
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    36
    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
    37
    or other application-level protocols.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    38
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    39
    TCP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    40
        TCP implementation using a SOCK_STREAM socket.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    41
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    42
        Stream          - connected TCP socket with TCP's byte stream semantics
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
        Service         - TCP socket accept()'ing Streams from remote Clients
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    45
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    46
        Client          - TCP socket connect()'ing to a remote Service
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    47
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
    UDP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    50
        UDP implementation using a SOCK_DGRAM socket.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    51
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    52
        Peer            - bind()'d UDP socket without any connection
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
        Client          - connect()'d UDP socket, representing a PacketStream
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    55
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
    UNIX:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    58
        UNIX socket implementation support both SOCK_STREAM and SOCK_DGRAM.
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    59
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    60
        XXX: verify that this is correct...
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
        Stream          - connected AF_UNIX SOCK_STREAM
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    63
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    64
        Service         - accept()'ing AF_UNIX socket of either SOCK_STREAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    65
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    66
        Client          - connect()'ing AF_UNIX socket of SOCK_STREAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    67
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    68
        Peer            - bind()'d AF_UNIX socket of SOCK_DGRAM mode
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    69
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    70
    SCTP:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    71
        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
    72
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    73
        Stream          - a PacketStream carried by an Association
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
        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
    76
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    77
        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
    78
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    79
        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
    80
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    81
        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
    82
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    83
    SSL:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    84
        SSL implementation using either OpenSSL or gnutls.
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
        Stream          - tcp.Stream carrying an encrypted byte stream
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
        Service         - tcp.Service accepting connections from SSL endpoints
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    89
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    90
        Client          - tcp.Client connecting to an SSL service
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    91
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    92
    SOCKS:
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    93
        SOCKSv5 client implementing TCP client serviecs.
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
        Stream          - tcp.Stream carried over a SOCKSv5 connections
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
        Client          - tcp.Client connecting via a SOCKSv5 server
d8a71a675862 some abstract shit
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    98
        
24
f18b5787c46c reorganize socket, adding af_inet/af_inet6 modules, and moving sctp in
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
"""