Current File : /home/mmdealscpanel/yummmdeals.com/sockets.tar
unicast.pyo000064400000000710150374041210006736 0ustar00�
��^c@s�dZddlZddlZddlTeee�Zejd�x=eej��dZ	ej
e	def�ejd�qGWdS(	iP�i����N(t*tis
i(Ri(tMYPORTtsysttimetsockettAF_INETt
SOCK_DGRAMtstbindtreprtdatatsendtotsleep(((s,/usr/lib64/python2.7/Demo/sockets/unicast.pyt<module>s

radio.pyo000064400000000727150374041210006376 0ustar00�
��^c@s�dZddlZddlTeee�Zejdef�xFejdd�\ZZ	ej
jee	�d�ej
je�qAWdS(iP�i����N(t*ti�is
(tMYPORTtsystsockettAF_INETt
SOCK_DGRAMtstbindtrecvfromtdatat	wherefromtstderrtwritetreprtstdout(((s*/usr/lib64/python2.7/Demo/sockets/radio.pyt<module>s
unixserver.pyo000064400000001121150374041210007477 0ustar00�
��^c@s�ddlZddlTdZeee�Zeje�dej�dGHejd�ej	�\Z
Zx0er�e
j
d�Zes�Pne
je�qmWe
j�eje�dS(i����N(t*sunix-socketsSock name is: [t]ii(tostsockettFILEtAF_UNIXtSOCK_STREAMtstbindtgetsocknametlistentaccepttconntaddrtTruetrecvtdatatsendtclosetunlink(((s//usr/lib64/python2.7/Demo/sockets/unixserver.pyt<module>s


	
unicast.py000064400000000346150374041210006564 0ustar00# Send UDP broadcast packets

MYPORT = 50000

import sys, time
from socket import *

s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))

while 1:
    data = repr(time.time()) + '\n'
    s.sendto(data, ('', MYPORT))
    time.sleep(2)
unixclient.pyo000064400000000650150374041210007455 0ustar00�
��^c@seddlTdZeee�Zeje�ejd�ejd�Zej	�dGe
e�GHdS(i����(t*sunix-socketsHello, worlditReceivedN(tsockettFILEtAF_UNIXtSOCK_STREAMtstconnecttsendtrecvtdatatclosetrepr(((s//usr/lib64/python2.7/Demo/sockets/unixclient.pyt<module>s



telnet.py000075500000005701150374041210006414 0ustar00#! /usr/bin/python2.7

# Minimal interface to the Internet telnet protocol.
#
# It refuses all telnet options and does not recognize any of the other
# telnet commands, but can still be used to connect in line-by-line mode.
# It's also useful to play with a number of other services,
# like time, finger, smtp and even ftp.
#
# Usage: telnet host [port]
#
# The port may be a service name or a decimal port number;
# it defaults to 'telnet'.


import sys, posix, time
from socket import *

BUFSIZE = 1024

# Telnet protocol characters

IAC  = chr(255) # Interpret as command
DONT = chr(254)
DO   = chr(253)
WONT = chr(252)
WILL = chr(251)

def main():
    host = sys.argv[1]
    try:
        hostaddr = gethostbyname(host)
    except error:
        sys.stderr.write(sys.argv[1] + ': bad host name\n')
        sys.exit(2)
    #
    if len(sys.argv) > 2:
        servname = sys.argv[2]
    else:
        servname = 'telnet'
    #
    if '0' <= servname[:1] <= '9':
        port = eval(servname)
    else:
        try:
            port = getservbyname(servname, 'tcp')
        except error:
            sys.stderr.write(servname + ': bad tcp service name\n')
            sys.exit(2)
    #
    s = socket(AF_INET, SOCK_STREAM)
    #
    try:
        s.connect((host, port))
    except error, msg:
        sys.stderr.write('connect failed: ' + repr(msg) + '\n')
        sys.exit(1)
    #
    pid = posix.fork()
    #
    if pid == 0:
        # child -- read stdin, write socket
        while 1:
            line = sys.stdin.readline()
            s.send(line)
    else:
        # parent -- read socket, write stdout
        iac = 0         # Interpret next char as command
        opt = ''        # Interpret next char as option
        while 1:
            data = s.recv(BUFSIZE)
            if not data:
                # EOF; kill child and exit
                sys.stderr.write( '(Closed by remote host)\n')
                posix.kill(pid, 9)
                sys.exit(1)
            cleandata = ''
            for c in data:
                if opt:
                    print ord(c)
                    s.send(opt + c)
                    opt = ''
                elif iac:
                    iac = 0
                    if c == IAC:
                        cleandata = cleandata + c
                    elif c in (DO, DONT):
                        if c == DO: print '(DO)',
                        else: print '(DONT)',
                        opt = IAC + WONT
                    elif c in (WILL, WONT):
                        if c == WILL: print '(WILL)',
                        else: print '(WONT)',
                        opt = IAC + DONT
                    else:
                        print '(command)', ord(c)
                elif c == IAC:
                    iac = 1
                    print '(IAC)',
                else:
                    cleandata = cleandata + c
            sys.stdout.write(cleandata)
            sys.stdout.flush()


try:
    main()
except KeyboardInterrupt:
    pass
rpython.py000075500000001311150374041210006615 0ustar00#! /usr/bin/python2.7

# Remote python client.
# Execute Python commands remotely and send output back.

import sys
import string
from socket import *

PORT = 4127
BUFSIZE = 1024

def main():
    if len(sys.argv) < 3:
        print "usage: rpython host command"
        sys.exit(2)
    host = sys.argv[1]
    port = PORT
    i = string.find(host, ':')
    if i >= 0:
        port = string.atoi(port[i+1:])
        host = host[:i]
    command = string.join(sys.argv[2:])
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((host, port))
    s.send(command)
    s.shutdown(1)
    reply = ''
    while 1:
        data = s.recv(BUFSIZE)
        if not data: break
        reply = reply + data
    print reply,

main()
mcast.pyo000064400000004171150374041210006404 0ustar00�
Afc@s}dZdZdZdZddlZddlZddlZddlZd�Zd�Z	d�Z
ed	krye�ndS(
i�s225.0.0.250s'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173ii����NcCsMdtjdkrtnt}dtjdkr?t|�n
t|�dS(Ns-6is-s(tsystargvt	MYGROUP_6t	MYGROUP_4tsendertreceiver(tgroup((s*/usr/lib64/python2.7/Demo/sockets/mcast.pytmains
cCs�tj|d�d}tj|dtj�}tjdt�}|dtjkrp|jtj	tj
|�n|jtjtj|�xKt
r�ttj��}|j|d|ddtf�tjd�q�WdS(Nis@isii(tsockettgetaddrinfotNonet
SOCK_DGRAMtstructtpacktMYTTLtAF_INETt
setsockoptt
IPPROTO_IPtIP_MULTICAST_TTLtIPPROTO_IPV6tIPV6_MULTICAST_HOPStTruetreprttimetsendtotMYPORTtsleep(Rtaddrinfotstttl_bintdata((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyRs	"cCsPtj|d�d}tj|dtj�}|jtjtjd�|jdtf�tj	|d|dd�}|dtj
kr�|tjdtj
�}|jtjtj|�n/|tjdd�}|jtjtj|�xYtrK|jd�\}}x|dd	kr.|d }qWt|�d
t|�GHq�WdS(Niitis=Is@Ii�i����ss  (RR	R
RRt
SOL_SOCKETtSO_REUSEADDRtbindRt	inet_ptonRRR
t
INADDR_ANYRtIP_ADD_MEMBERSHIPRtIPV6_JOIN_GROUPRtrecvfromtstrR(RRRt	group_bintmreqRR((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyR1s	t__main__(RRRRRRRRRRRt__name__(((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyt<module>s				udpecho.pyo000064400000003753150374041210006731 0ustar00�
Afc@sQddlZddlTd
ZdZd�Zd�Zd�Zd	�Ze�dS(i����N(t*iP�iicCsdttj�dkrt�ntjddkr<t�n$tjddkrYt�nt�dS(Niis-ss-c(tlentsystargvtusagetservertclient(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pytmains


cCs'tjt_dGHdGHtjd�dS(Ns,Usage: udpecho -s [port]            (server)s,or:    udpecho -c host [port] <file (client)i(Rtstderrtstdouttexit(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyRscCs�ttj�dkr+ttjd�}nt}ttt�}|jd|f�dGHx8|j	t
�\}}d||fGH|j||�q[WdS(Nitsudp echo server readysserver received %r from %r(RRRtevalt	ECHO_PORTtsockettAF_INETt
SOCK_DGRAMtbindtrecvfromtBUFSIZEtsendto(tporttstdatataddr((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyRscCs�ttj�dkrt�ntjd}ttj�dkrWttjd�}nt}||f}ttt�}|j	d�dGHxQtj
j�}|s�Pn|j||�|j
t�\}}d||fGHq�WdS(NiiRis$udp echo client ready, reading stdinsclient received %r from %r(Ri(RRRRRR
RRRRtstdintreadlineRRR(thostRRRtlineRtfromaddr((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyR+s"


iW�(RRR
RRRRR(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyt<module>s
	
		
	throughput.py000075500000004044150374041210007331 0ustar00#! /usr/bin/python2.7

# Test network throughput.
#
# Usage:
# 1) on host_A: throughput -s [port]                    # start a server
# 2) on host_B: throughput -c  count host_A [port]      # start a client
#
# The server will service multiple clients until it is killed.
#
# The client performs one transfer of count*BUFSIZE bytes and
# measures the time it takes (roundtrip!).


import sys, time
from socket import *

MY_PORT = 50000 + 42

BUFSIZE = 1024


def main():
    if len(sys.argv) < 2:
        usage()
    if sys.argv[1] == '-s':
        server()
    elif sys.argv[1] == '-c':
        client()
    else:
        usage()


def usage():
    sys.stdout = sys.stderr
    print 'Usage:    (on host_A) throughput -s [port]'
    print 'and then: (on host_B) throughput -c count host_A [port]'
    sys.exit(2)


def server():
    if len(sys.argv) > 2:
        port = eval(sys.argv[2])
    else:
        port = MY_PORT
    s = socket(AF_INET, SOCK_STREAM)
    s.bind(('', port))
    s.listen(1)
    print 'Server ready...'
    while 1:
        conn, (host, remoteport) = s.accept()
        while 1:
            data = conn.recv(BUFSIZE)
            if not data:
                break
            del data
        conn.send('OK\n')
        conn.close()
        print 'Done with', host, 'port', remoteport


def client():
    if len(sys.argv) < 4:
        usage()
    count = int(eval(sys.argv[2]))
    host = sys.argv[3]
    if len(sys.argv) > 4:
        port = eval(sys.argv[4])
    else:
        port = MY_PORT
    testdata = 'x' * (BUFSIZE-1) + '\n'
    t1 = time.time()
    s = socket(AF_INET, SOCK_STREAM)
    t2 = time.time()
    s.connect((host, port))
    t3 = time.time()
    i = 0
    while i < count:
        i = i+1
        s.send(testdata)
    s.shutdown(1) # Send EOF
    t4 = time.time()
    data = s.recv(BUFSIZE)
    t5 = time.time()
    print data
    print 'Raw timers:', t1, t2, t3, t4, t5
    print 'Intervals:', t2-t1, t3-t2, t4-t3, t5-t4
    print 'Total:', t5-t1
    print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),
    print 'K/sec.'


main()
broadcast.py000064400000000433150374041210007055 0ustar00# Send UDP broadcast packets

MYPORT = 50000

import sys, time
from socket import *

s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)

while 1:
    data = repr(time.time()) + '\n'
    s.sendto(data, ('<broadcast>', MYPORT))
    time.sleep(2)
mcast.pyc000064400000004171150374041210006370 0ustar00�
Afc@s}dZdZdZdZddlZddlZddlZddlZd�Zd�Z	d�Z
ed	krye�ndS(
i�s225.0.0.250s'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173ii����NcCsMdtjdkrtnt}dtjdkr?t|�n
t|�dS(Ns-6is-s(tsystargvt	MYGROUP_6t	MYGROUP_4tsendertreceiver(tgroup((s*/usr/lib64/python2.7/Demo/sockets/mcast.pytmains
cCs�tj|d�d}tj|dtj�}tjdt�}|dtjkrp|jtj	tj
|�n|jtjtj|�xKt
r�ttj��}|j|d|ddtf�tjd�q�WdS(Nis@isii(tsockettgetaddrinfotNonet
SOCK_DGRAMtstructtpacktMYTTLtAF_INETt
setsockoptt
IPPROTO_IPtIP_MULTICAST_TTLtIPPROTO_IPV6tIPV6_MULTICAST_HOPStTruetreprttimetsendtotMYPORTtsleep(Rtaddrinfotstttl_bintdata((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyRs	"cCsPtj|d�d}tj|dtj�}|jtjtjd�|jdtf�tj	|d|dd�}|dtj
kr�|tjdtj
�}|jtjtj|�n/|tjdd�}|jtjtj|�xYtrK|jd�\}}x|dd	kr.|d }qWt|�d
t|�GHq�WdS(Niitis=Is@Ii�i����ss  (RR	R
RRt
SOL_SOCKETtSO_REUSEADDRtbindRt	inet_ptonRRR
t
INADDR_ANYRtIP_ADD_MEMBERSHIPRtIPV6_JOIN_GROUPRtrecvfromtstrR(RRRt	group_bintmreqRR((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyR1s	t__main__(RRRRRRRRRRRt__name__(((s*/usr/lib64/python2.7/Demo/sockets/mcast.pyt<module>s				ftp.py000064400000007530150374041210005711 0ustar00# A simple FTP client.
#
# The information to write this program was gathered from RFC 959,
# but this is not a complete implementation!  Yet it shows how a simple
# FTP client can be built, and you are welcome to extend it to suit
# it to your needs...
#
# How it works (assuming you've read the RFC):
#
# User commands are passed uninterpreted to the server.  However, the
# user never needs to send a PORT command.  Rather, the client opens a
# port right away and sends the appropriate PORT command to the server.
# When a response code 150 is received, this port is used to receive
# the data (which is written to stdout in this version), and when the
# data is exhausted, a new port is opened and a corresponding PORT
# command sent.  In order to avoid errors when reusing ports quickly
# (and because there is no s.getsockname() method in Python yet) we
# cycle through a number of ports in the 50000 range.


import sys, posix, string
from socket import *


BUFSIZE = 1024

# Default port numbers used by the FTP protocol.
#
FTP_PORT = 21
FTP_DATA_PORT = FTP_PORT - 1

# Change the data port to something not needing root permissions.
#
FTP_DATA_PORT = FTP_DATA_PORT + 50000


# Main program (called at the end of this file).
#
def main():
    hostname = sys.argv[1]
    control(hostname)


# Control process (user interface and user protocol interpreter).
#
def control(hostname):
    #
    # Create control connection
    #
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((hostname, FTP_PORT))
    f = s.makefile('r') # Reading the replies is easier from a file...
    #
    # Control loop
    #
    r = None
    while 1:
        code = getreply(f)
        if code in ('221', 'EOF'): break
        if code == '150':
            getdata(r)
            code = getreply(f)
            r = None
        if not r:
            r = newdataport(s, f)
        cmd = getcommand()
        if not cmd: break
        s.send(cmd + '\r\n')


# Create a new data port and send a PORT command to the server for it.
# (Cycle through a number of ports to avoid problems with reusing
# a port within a short time.)
#
nextport = 0
#
def newdataport(s, f):
    global nextport
    port = nextport + FTP_DATA_PORT
    nextport = (nextport+1) % 16
    r = socket(AF_INET, SOCK_STREAM)
    r.bind((gethostbyname(gethostname()), port))
    r.listen(1)
    sendportcmd(s, f, port)
    return r


# Send an appropriate port command.
#
def sendportcmd(s, f, port):
    hostname = gethostname()
    hostaddr = gethostbyname(hostname)
    hbytes = string.splitfields(hostaddr, '.')
    pbytes = [repr(port//256), repr(port%256)]
    bytes = hbytes + pbytes
    cmd = 'PORT ' + string.joinfields(bytes, ',')
    s.send(cmd + '\r\n')
    code = getreply(f)


# Process an ftp reply and return the 3-digit reply code (as a string).
# The reply should be a line of text starting with a 3-digit number.
# If the 4th char is '-', it is a multi-line reply and is
# terminate by a line starting with the same 3-digit number.
# Any text while receiving the reply is echoed to the file.
#
def getreply(f):
    line = f.readline()
    if not line: return 'EOF'
    print line,
    code = line[:3]
    if line[3:4] == '-':
        while 1:
            line = f.readline()
            if not line: break # Really an error
            print line,
            if line[:3] == code and line[3:4] != '-': break
    return code


# Get the data from the data connection.
#
def getdata(r):
    print '(accepting data connection)'
    conn, host = r.accept()
    print '(data connection accepted)'
    while 1:
        data = conn.recv(BUFSIZE)
        if not data: break
        sys.stdout.write(data)
    print '(end of data connection)'

# Get a command from the user.
#
def getcommand():
    try:
        while 1:
            line = raw_input('ftp.py> ')
            if line: return line
    except EOFError:
        return ''


# Call the main program.
#
main()
echosvr.py000075500000001342150374041210006567 0ustar00#! /usr/bin/python2.7

# Python implementation of an 'echo' tcp server: echo all data it receives.
#
# This is the simplest possible server, servicing a single request only.

import sys
from socket import *

# The standard echo port isn't very useful, it requires root permissions!
# ECHO_PORT = 7
ECHO_PORT = 50000 + 7
BUFSIZE = 1024

def main():
    if len(sys.argv) > 1:
        port = int(eval(sys.argv[1]))
    else:
        port = ECHO_PORT
    s = socket(AF_INET, SOCK_STREAM)
    s.bind(('', port))
    s.listen(1)
    conn, (remotehost, remoteport) = s.accept()
    print 'connected by', remotehost, remoteport
    while 1:
        data = conn.recv(BUFSIZE)
        if not data:
            break
        conn.send(data)

main()
echosvr.pyo000064400000001473150374041210006750 0ustar00�
Afc@s6ddlZddlTdZdZd�Ze�dS(i����N(t*iP�iicCs�ttj�dkr1tttjd��}nt}ttt�}|j	d|f�|j
d�|j�\}\}}dG|G|GHx*|jt
�}|s�Pn|j|�q�WdS(Nitsconnected by(tlentsystargvtinttevalt	ECHO_PORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtsend(tporttstconnt
remotehostt
remoteporttdata((s,/usr/lib64/python2.7/Demo/sockets/echosvr.pytmains

iW�(RRRRR(((s,/usr/lib64/python2.7/Demo/sockets/echosvr.pyt<module>s

	telnet.pyo000064400000004145150374041210006571 0ustar00�
Afc@s�ddlZddlZddlZddlTdZed�Zed�Zed�Zed�Z	ed�Z
d	�Zye�Wnek
r�nXdS(
i����N(t*ii�i�i�i�i�c
Cs!tjd}yt|�}Wn9tk
rXtjjtjdd�tjd�nXttj�dkr~tjd}nd}d|d ko�dknr�t|�}nHyt	|d�}Wn2tk
r�tjj|d�tjd�nXt
tt�}y|j
||f�Wn>tk
ra}tjjd	t|�d
�tjd�nXtj�}|dkr�x�tjj�}|j|�q}Wn}d}d}	xn|jt�}
|
s�tjjd
�tj|d�tjd�nd}x�|
D]�}|	r2t|�GH|j|	|�d}	q|r�d}|tkrW||}q�|ttfkr�|tkr|dGndGtt}	q�|ttfkr�|tkr�dGndGtt}	q�dGt|�GHq|tkr�d}dGq||}qWtjj|�tjj�q�WdS(Nis: bad host name
ittelnett0t9ttcps: bad tcp service name
sconnect failed: s
its(Closed by remote host)
i	s(DO)s(DONT)s(WILL)s(WONT)s	(command)s(IAC)(tsystargvt
gethostbynameterrortstderrtwritetexittlentevalt
getservbynametsockettAF_INETtSOCK_STREAMtconnecttreprtposixtforktstdintreadlinetsendtrecvtBUFSIZEtkilltordtIACtDOtDONTtWONTtWILLtstdouttflush(
thostthostaddrtservnametporttstmsgtpidtlinetiactopttdatat	cleandatatc((s+/usr/lib64/python2.7/Demo/sockets/telnet.pytmains|

 

	


(
RRttimeRRtchrRR RR!R"R2tKeyboardInterrupt(((s+/usr/lib64/python2.7/Demo/sockets/telnet.pyt<module>s$
	M
finger.pyo000064400000002212150374041210006541 0ustar00�
Afc@sEddlZddlZddlTdZd�Zd�Ze�dS(i����N(t*iOcCstttt�}|j|tf�|j|d�x-|jd�}|sOPntjj	|�q6Wtjj
�dS(Ns
i(tsockettAF_INETtSOCK_STREAMtconnecttFINGER_PORTtsendtrecvtsyststdouttwritetflush(thosttargststbuf((s+/usr/lib64/python2.7/Demo/sockets/finger.pytfingerscCs�d}d}xO|ttj�kr]tj|d dkr]|tj|d}|d}qWtj|}|s}dg}nx^|D]V}d|kr�tj|d�}||d}|| }nd}t|||�q�WdS(Ntit-t t@(tlenRtargvtstringtindexR(toptionstiR
targtatR((s+/usr/lib64/python2.7/Demo/sockets/finger.pytmain%s/


(RRRRRR(((s+/usr/lib64/python2.7/Demo/sockets/finger.pyt<module>s

	
	README000064400000001164150374041210005423 0ustar00This directory contains some demonstrations of the socket module:

broadcast.py	 	Broadcast the time to radio.py.
echosvr.py		About the simplest TCP server possible.
finger.py		Client for the 'finger' protocol.
ftp.py			A very simple ftp client.
gopher.py		A simple gopher client.
mcast.py		IPv4/v6 multicast example
radio.py		Receive time broadcasts from broadcast.py.
telnet.py		Client for the 'telnet' protocol.
throughput.py		Client and server to measure TCP throughput.
unixclient.py		Unix socket example, client side
unixserver.py		Unix socket example, server side
udpecho.py		Client and server for the UDP echo protocol.
echosvr.pyc000064400000001473150374041210006734 0ustar00�
Afc@s6ddlZddlTdZdZd�Ze�dS(i����N(t*iP�iicCs�ttj�dkr1tttjd��}nt}ttt�}|j	d|f�|j
d�|j�\}\}}dG|G|GHx*|jt
�}|s�Pn|j|�q�WdS(Nitsconnected by(tlentsystargvtinttevalt	ECHO_PORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtsend(tporttstconnt
remotehostt
remoteporttdata((s,/usr/lib64/python2.7/Demo/sockets/echosvr.pytmains

iW�(RRRRR(((s,/usr/lib64/python2.7/Demo/sockets/echosvr.pyt<module>s

	gopher.py000075500000023067150374041210006412 0ustar00#! /usr/bin/python2.7

# A simple gopher client.
#
# Usage: gopher [ [selector] host [port] ]

import string
import sys
import os
import socket

# Default selector, host and port
DEF_SELECTOR = ''
DEF_HOST     = 'gopher.micro.umn.edu'
DEF_PORT     = 70

# Recognized file types
T_TEXTFILE  = '0'
T_MENU      = '1'
T_CSO       = '2'
T_ERROR     = '3'
T_BINHEX    = '4'
T_DOS       = '5'
T_UUENCODE  = '6'
T_SEARCH    = '7'
T_TELNET    = '8'
T_BINARY    = '9'
T_REDUNDANT = '+'
T_SOUND     = 's'

# Dictionary mapping types to strings
typename = {'0': '<TEXT>', '1': '<DIR>', '2': '<CSO>', '3': '<ERROR>', \
        '4': '<BINHEX>', '5': '<DOS>', '6': '<UUENCODE>', '7': '<SEARCH>', \
        '8': '<TELNET>', '9': '<BINARY>', '+': '<REDUNDANT>', 's': '<SOUND>'}

# Oft-used characters and strings
CRLF = '\r\n'
TAB = '\t'

# Open a TCP connection to a given host and port
def open_socket(host, port):
    if not port:
        port = DEF_PORT
    elif type(port) == type(''):
        port = string.atoi(port)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    return s

# Send a selector to a given host and port, return a file with the reply
def send_request(selector, host, port):
    s = open_socket(host, port)
    s.send(selector + CRLF)
    s.shutdown(1)
    return s.makefile('r')

# Get a menu in the form of a list of entries
def get_menu(selector, host, port):
    f = send_request(selector, host, port)
    list = []
    while 1:
        line = f.readline()
        if not line:
            print '(Unexpected EOF from server)'
            break
        if line[-2:] == CRLF:
            line = line[:-2]
        elif line[-1:] in CRLF:
            line = line[:-1]
        if line == '.':
            break
        if not line:
            print '(Empty line from server)'
            continue
        typechar = line[0]
        parts = string.splitfields(line[1:], TAB)
        if len(parts) < 4:
            print '(Bad line from server: %r)' % (line,)
            continue
        if len(parts) > 4:
            print '(Extra info from server: %r)' % (parts[4:],)
        parts.insert(0, typechar)
        list.append(parts)
    f.close()
    return list

# Get a text file as a list of lines, with trailing CRLF stripped
def get_textfile(selector, host, port):
    list = []
    get_alt_textfile(selector, host, port, list.append)
    return list

# Get a text file and pass each line to a function, with trailing CRLF stripped
def get_alt_textfile(selector, host, port, func):
    f = send_request(selector, host, port)
    while 1:
        line = f.readline()
        if not line:
            print '(Unexpected EOF from server)'
            break
        if line[-2:] == CRLF:
            line = line[:-2]
        elif line[-1:] in CRLF:
            line = line[:-1]
        if line == '.':
            break
        if line[:2] == '..':
            line = line[1:]
        func(line)
    f.close()

# Get a binary file as one solid data block
def get_binary(selector, host, port):
    f = send_request(selector, host, port)
    data = f.read()
    f.close()
    return data

# Get a binary file and pass each block to a function
def get_alt_binary(selector, host, port, func, blocksize):
    f = send_request(selector, host, port)
    while 1:
        data = f.read(blocksize)
        if not data:
            break
        func(data)

# A *very* simple interactive browser

# Browser main command, has default arguments
def browser(*args):
    selector = DEF_SELECTOR
    host = DEF_HOST
    port = DEF_PORT
    n = len(args)
    if n > 0 and args[0]:
        selector = args[0]
    if n > 1 and args[1]:
        host = args[1]
    if n > 2 and args[2]:
        port = args[2]
    if n > 3:
        raise RuntimeError, 'too many args'
    try:
        browse_menu(selector, host, port)
    except socket.error, msg:
        print 'Socket error:', msg
        sys.exit(1)
    except KeyboardInterrupt:
        print '\n[Goodbye]'

# Browse a menu
def browse_menu(selector, host, port):
    list = get_menu(selector, host, port)
    while 1:
        print '----- MENU -----'
        print 'Selector:', repr(selector)
        print 'Host:', host, ' Port:', port
        print
        for i in range(len(list)):
            item = list[i]
            typechar, description = item[0], item[1]
            print string.rjust(repr(i+1), 3) + ':', description,
            if typename.has_key(typechar):
                print typename[typechar]
            else:
                print '<TYPE=' + repr(typechar) + '>'
        print
        while 1:
            try:
                str = raw_input('Choice [CR == up a level]: ')
            except EOFError:
                print
                return
            if not str:
                return
            try:
                choice = string.atoi(str)
            except string.atoi_error:
                print 'Choice must be a number; try again:'
                continue
            if not 0 < choice <= len(list):
                print 'Choice out of range; try again:'
                continue
            break
        item = list[choice-1]
        typechar = item[0]
        [i_selector, i_host, i_port] = item[2:5]
        if typebrowser.has_key(typechar):
            browserfunc = typebrowser[typechar]
            try:
                browserfunc(i_selector, i_host, i_port)
            except (IOError, socket.error):
                print '***', sys.exc_type, ':', sys.exc_value
        else:
            print 'Unsupported object type'

# Browse a text file
def browse_textfile(selector, host, port):
    x = None
    try:
        p = os.popen('${PAGER-more}', 'w')
        x = SaveLines(p)
        get_alt_textfile(selector, host, port, x.writeln)
    except IOError, msg:
        print 'IOError:', msg
    if x:
        x.close()
    f = open_savefile()
    if not f:
        return
    x = SaveLines(f)
    try:
        get_alt_textfile(selector, host, port, x.writeln)
        print 'Done.'
    except IOError, msg:
        print 'IOError:', msg
    x.close()

# Browse a search index
def browse_search(selector, host, port):
    while 1:
        print '----- SEARCH -----'
        print 'Selector:', repr(selector)
        print 'Host:', host, ' Port:', port
        print
        try:
            query = raw_input('Query [CR == up a level]: ')
        except EOFError:
            print
            break
        query = string.strip(query)
        if not query:
            break
        if '\t' in query:
            print 'Sorry, queries cannot contain tabs'
            continue
        browse_menu(selector + TAB + query, host, port)

# "Browse" telnet-based information, i.e. open a telnet session
def browse_telnet(selector, host, port):
    if selector:
        print 'Log in as', repr(selector)
    if type(port) <> type(''):
        port = repr(port)
    sts = os.system('set -x; exec telnet ' + host + ' ' + port)
    if sts:
        print 'Exit status:', sts

# "Browse" a binary file, i.e. save it to a file
def browse_binary(selector, host, port):
    f = open_savefile()
    if not f:
        return
    x = SaveWithProgress(f)
    get_alt_binary(selector, host, port, x.write, 8*1024)
    x.close()

# "Browse" a sound file, i.e. play it or save it
def browse_sound(selector, host, port):
    browse_binary(selector, host, port)

# Dictionary mapping types to browser functions
typebrowser = {'0': browse_textfile, '1': browse_menu, \
        '4': browse_binary, '5': browse_binary, '6': browse_textfile, \
        '7': browse_search, \
        '8': browse_telnet, '9': browse_binary, 's': browse_sound}

# Class used to save lines, appending a newline to each line
class SaveLines:
    def __init__(self, f):
        self.f = f
    def writeln(self, line):
        self.f.write(line + '\n')
    def close(self):
        sts = self.f.close()
        if sts:
            print 'Exit status:', sts

# Class used to save data while showing progress
class SaveWithProgress:
    def __init__(self, f):
        self.f = f
    def write(self, data):
        sys.stdout.write('#')
        sys.stdout.flush()
        self.f.write(data)
    def close(self):
        print
        sts = self.f.close()
        if sts:
            print 'Exit status:', sts

# Ask for and open a save file, or return None if not to save
def open_savefile():
    try:
        savefile = raw_input( \
    'Save as file [CR == don\'t save; |pipeline or ~user/... OK]: ')
    except EOFError:
        print
        return None
    savefile = string.strip(savefile)
    if not savefile:
        return None
    if savefile[0] == '|':
        cmd = string.strip(savefile[1:])
        try:
            p = os.popen(cmd, 'w')
        except IOError, msg:
            print repr(cmd), ':', msg
            return None
        print 'Piping through', repr(cmd), '...'
        return p
    if savefile[0] == '~':
        savefile = os.path.expanduser(savefile)
    try:
        f = open(savefile, 'w')
    except IOError, msg:
        print repr(savefile), ':', msg
        return None
    print 'Saving to', repr(savefile), '...'
    return f

# Test program
def test():
    if sys.argv[4:]:
        print 'usage: gopher [ [selector] host [port] ]'
        sys.exit(2)
    elif sys.argv[3:]:
        browser(sys.argv[1], sys.argv[2], sys.argv[3])
    elif sys.argv[2:]:
        try:
            port = string.atoi(sys.argv[2])
            selector = ''
            host = sys.argv[1]
        except string.atoi_error:
            selector = sys.argv[1]
            host = sys.argv[2]
            port = ''
        browser(selector, host, port)
    elif sys.argv[1:]:
        browser('', sys.argv[1])
    else:
        browser()

# Call the test program as a main program
test()
rpython.pyo000064400000001726150374041210007003 0ustar00�
Afc@sBddlZddlZddlTdZdZd�Ze�dS(i����N(t*iicCs	ttj�dkr*dGHtjd�ntjd}t}tj|d�}|dkrtj||d�}|| }ntjtjd�}t	t
t�}|j||f�|j
|�|jd�d}x'|jt�}|s�Pn||}q�W|GdS(Nisusage: rpython host commandiit:it(tlentsystargvtexittPORTtstringtfindtatoitjointsockettAF_INETtSOCK_STREAMtconnecttsendtshutdowntrecvtBUFSIZE(thosttporttitcommandtstreplytdata((s,/usr/lib64/python2.7/Demo/sockets/rpython.pytmain
s*



(RRRRRR(((s,/usr/lib64/python2.7/Demo/sockets/rpython.pyt<module>s
	unixserver.py000064400000000636150374041210007332 0ustar00# Echo server demo using Unix sockets (handles one connection only)
# Piet van Oostrum

import os
from socket import *

FILE = 'unix-socket'
s = socket(AF_UNIX, SOCK_STREAM)
s.bind(FILE)

print 'Sock name is: ['+s.getsockname()+']'

# Wait for a connection
s.listen(1)
conn, addr = s.accept()

while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.send(data)

conn.close()
os.unlink(FILE)
broadcast.pyc000064400000001043150374041210007216 0ustar00�
��^c@s�dZddlZddlZddlTeee�Zejd
�eje	e
d�x=eej��dZej
edef�ejd	�qZWdS(iP�i����N(t*tiis
s<broadcast>i(Ri(tMYPORTtsysttimetsockettAF_INETt
SOCK_DGRAMtstbindt
setsockoptt
SOL_SOCKETtSO_BROADCASTtreprtdatatsendtotsleep(((s./usr/lib64/python2.7/Demo/sockets/broadcast.pyt<module>s

unixclient.py000064400000000350150374041210007273 0ustar00# Echo client demo using Unix sockets
# Piet van Oostrum

from socket import *

FILE = 'unix-socket'
s = socket(AF_UNIX, SOCK_STREAM)
s.connect(FILE)
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)
radio.pyc000064400000000727150374041210006362 0ustar00�
��^c@s�dZddlZddlTeee�Zejdef�xFejdd�\ZZ	ej
jee	�d�ej
je�qAWdS(iP�i����N(t*ti�is
(tMYPORTtsystsockettAF_INETt
SOCK_DGRAMtstbindtrecvfromtdatat	wherefromtstderrtwritetreprtstdout(((s*/usr/lib64/python2.7/Demo/sockets/radio.pyt<module>s
unicast.pyc000064400000000710150374041210006722 0ustar00�
��^c@s�dZddlZddlZddlTeee�Zejd�x=eej��dZ	ej
e	def�ejd�qGWdS(	iP�i����N(t*tis
i(Ri(tMYPORTtsysttimetsockettAF_INETt
SOCK_DGRAMtstbindtreprtdatatsendtotsleep(((s,/usr/lib64/python2.7/Demo/sockets/unicast.pyt<module>s

broadcast.pyo000064400000001043150374041210007232 0ustar00�
��^c@s�dZddlZddlZddlTeee�Zejd
�eje	e
d�x=eej��dZej
edef�ejd	�qZWdS(iP�i����N(t*tiis
s<broadcast>i(Ri(tMYPORTtsysttimetsockettAF_INETt
SOCK_DGRAMtstbindt
setsockoptt
SOL_SOCKETtSO_BROADCASTtreprtdatatsendtotsleep(((s./usr/lib64/python2.7/Demo/sockets/broadcast.pyt<module>s

rpythond.py000075500000002275150374041210006773 0ustar00#! /usr/bin/python2.7

# Remote python server.
# Execute Python commands remotely and send output back.
# WARNING: This version has a gaping security hole -- it accepts requests
# from any host on the Internet!

import sys
from socket import *
import StringIO
import traceback

PORT = 4127
BUFSIZE = 1024

def main():
    if len(sys.argv) > 1:
        port = int(eval(sys.argv[1]))
    else:
        port = PORT
    s = socket(AF_INET, SOCK_STREAM)
    s.bind(('', port))
    s.listen(1)
    while 1:
        conn, (remotehost, remoteport) = s.accept()
        print 'connected by', remotehost, remoteport
        request = ''
        while 1:
            data = conn.recv(BUFSIZE)
            if not data:
                break
            request = request + data
        reply = execute(request)
        conn.send(reply)
        conn.close()

def execute(request):
    stdout = sys.stdout
    stderr = sys.stderr
    sys.stdout = sys.stderr = fakefile = StringIO.StringIO()
    try:
        try:
            exec request in {}, {}
        except:
            print
            traceback.print_exc(100)
    finally:
        sys.stderr = stderr
        sys.stdout = stdout
    return fakefile.getvalue()

main()
ftp.pyo000064400000005612150374041210006067 0ustar00�
��^c@s�ddlZddlZddlZddlTdZdZedZedZd�Zd�Zd	a	d
�Z
d�Zd�Zd
�Z
d�Ze�dS(i����N(t*iiiiP�cCstjd}t|�dS(Ni(tsystargvtcontrol(thostname((s(/usr/lib64/python2.7/Demo/sockets/ftp.pytmain's
cCs�ttt�}|j|tf�|jd�}d}x�t|�}|dkrVPn|dkr�t|�t|�}d}n|s�t	||�}nt
�}|s�Pn|j|d�q:WdS(Ntrt221tEOFt150s
(RR(tsockettAF_INETtSOCK_STREAMtconnecttFTP_PORTtmakefiletNonetgetreplytgetdatatnewdataportt
getcommandtsend(RtstfRtcodetcmd((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR.s$
		icCsdtt}tddattt�}|jtt��|f�|jd�t	|||�|S(Nii(
tnextportt
FTP_DATA_PORTR
RRtbindt
gethostbynametgethostnametlistentsendportcmd(RRtportR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyRMs

c
Cs�t�}t|�}tj|d�}t|d�t|d�g}||}dtj|d�}|j|d�t|�}	dS(Nt.isPORT t,s
(RRtstringtsplitfieldstreprt
joinfieldsRR(
RRR!RthostaddrthbytestpbytestbytesRR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR Zs	 
cCs�|j�}|sdS|G|d }|dd!dkr�xH|j�}|sPPn|G|d |kr:|dd!dkr:Pq:q:Wn|S(NRiit-(treadline(RtlineR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyRks
#cCsUdGH|j�\}}dGHx-|jt�}|s8Pntjj|�qWdGHdS(Ns(accepting data connection)s(data connection accepted)s(end of data connection)(taccepttrecvtBUFSIZERtstdouttwrite(Rtconnthosttdata((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR{scCs:y!xtd�}|r|SqWWntk
r5dSXdS(Nsftp.py> t(t	raw_inputtEOFError(R.((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR�s
(RtposixR$R
R1RRRRRRR RRR(((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyt<module>s$


			
				rpythond.pyo000064400000002467150374041210007152 0ustar00�
Afc@sWddlZddlTddlZddlZdZdZd�Zd�Ze�dS(i����N(t*iicCs�ttj�dkr1tttjd��}nt}ttt�}|j	d|f�|j
d�x||j�\}\}}dG|G|GHd}x'|jt
�}|s�Pn||}q�Wt|�}|j|�|j�qiWdS(Nitsconnected by(tlentsystargvtinttevaltPORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtexecutetsendtclose(tporttstconnt
remotehostt
remoteporttrequesttdatatreply((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pytmains$


cBsvej}ej}ej�e_e_}z*y|iiUWnHejd�nXWd|e_|e_X|j�S(Nid(RtstdouttstderrtStringIOt	tracebackt	print_exctgetvalue(RRRtfakefile((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pyR%s			
(RRRRRRRR(((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pyt<module>s
		gopher.pyc000064400000024123150374041210006544 0ustar00�
Afc@s�ddlZddlZddlZddlZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZidd6dd6dd6dd6dd	6dd
6dd6dd6dd
6dd6dd6dd6ZdZdZd�Zd �Zd!�Zd"�Zd#�Zd$�Zd%�Zd&�Zd'�Zd(�Zd)�Z d*�Z!d+�Z"d,�Z#i	ed6ed6e"d	6e"d
6ed6e d6e!d
6e"d6e#d6Z$d-d3d.��YZ%d/d4d0��YZ&d1�Z'd2�Z(e(�dS(5i����Ntsgopher.micro.umn.eduiFt0t1t2t3t4t5t6t7t8t9t+tss<TEXT>s<DIR>s<CSO>s<ERROR>s<BINHEX>s<DOS>s
<UUENCODE>s<SEARCH>s<TELNET>s<BINARY>s<REDUNDANT>s<SOUND>s
s	cCsh|st}n*t|�td�kr9tj|�}ntjtjtj�}|j||f�|S(NR(tDEF_PORTttypetstringtatoitsockettAF_INETtSOCK_STREAMtconnect(thosttportR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytopen_socket)s	cCs:t||�}|j|t�|jd�|jd�S(Nitr(RtsendtCRLFtshutdowntmakefile(tselectorRRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytsend_request3s
cCs)t|||�}g}x|j�}|s6dGHPn|dtkrS|d }n|dtkrp|d }n|dkr�Pn|s�dGHqn|d}tj|dt�}t|�dkr�d	|fGHqnt|�dkr�d
|dfGHn|jd|�|j|�qW|j	�|S(Ns(Unexpected EOF from server)i����i����t.s(Empty line from server)iiis(Bad line from server: %r)s(Extra info from server: %r)(
RtreadlineRRtsplitfieldstTABtlentinserttappendtclose(RRRtftlisttlinettypechartparts((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_menu:s6



cCs g}t||||j�|S(N(tget_alt_textfileR%(RRRR(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_textfileXscCs�t|||�}x�|j�}|s0dGHPn|dtkrM|d }n|dtkrj|d }n|dkrzPn|d dkr�|d}n||�qW|j�dS(Ns(Unexpected EOF from server)i����i����Ris..i(RR RR&(RRRtfuncR'R)((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR-^s 


cCs,t|||�}|j�}|j�|S(N(RtreadR&(RRRR'tdata((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
get_binaryqs
cCs@t|||�}x'|j|�}|s.Pn||�qWdS(N(RR0(RRRR/t	blocksizeR'R1((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_alt_binaryxscGs�t}t}t}t|�}|dkrA|drA|d}n|dkrd|drd|d}n|dkr�|dr�|d}n|dkr�td�nyt|||�WnAtjk
r�}dG|GHtj	d�nt
k
r�dGHnXdS(Niiiis
too many argss
Socket error:s

[Goodbye](tDEF_SELECTORtDEF_HOSTR
R#tRuntimeErrortbrowse_menuRterrortsystexittKeyboardInterrupt(targsRRRtntmsg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowser�s&


	
cCs�t|||�}x�dGHdGt|�GHdG|GdG|GHHx�tt|��D]u}||}|d|d}}tjt|d�d�dG|Gtj|�r�t|GHqNd	t|�d
GHqNWHx�ytd�}Wnt	k
r�HdSX|s�dSytj
|�}	Wntjk
r,dGHq�nXd|	koJt|�knsZd
GHq�nPq�W||	d}|d}|dd!\}
}}tj|�r�t|}
y|
|
||�Wq�t
tjfk
r�dGtjGdGtjGHq�XqdGHqWdS(Ns----- MENU -----s	Selector:sHost:s Port:iiit:s<TYPE=t>sChoice [CR == up a level]: s#Choice must be a number; try again:sChoice out of range; try again:iis***sUnsupported object type(R,treprtrangeR#Rtrjustttypenamethas_keyt	raw_inputtEOFErrorRt
atoi_errorttypebrowsertIOErrorRR9R:texc_typet	exc_value(RRRR(tititemR*tdescriptiontstrtchoicet
i_selectorti_hostti_porttbrowserfunc((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR8�sR
"
"

cCs�d}y8tjdd�}t|�}t||||j�Wntk
r\}dG|GHnX|rp|j�nt�}|s�dSt|�}yt||||j�dGHWntk
r�}dG|GHnX|j�dS(Ns
${PAGER-more}twsIOError:sDone.(	tNonetostpopent	SaveLinesR-twritelnRLR&t
open_savefile(RRRtxtpR?R'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowse_textfile�s&

		
cCs�x�dGHdGt|�GHdG|GdG|GHHytd�}Wntk
rNHPnXtj|�}|shPnd|krdGHqnt|t|||�qWdS(Ns----- SEARCH -----s	Selector:sHost:s Port:sQuery [CR == up a level]: s	s"Sorry, queries cannot contain tabs(RCRHRIRtstripR8R"(RRRtquery((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_search�s"
cCsp|rdGt|�GHnt|�td�kr?t|�}ntjd|d|�}|rldG|GHndS(Ns	Log in asRsset -x; exec telnet t sExit status:(RCRRZtsystem(RRRtsts((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_telnet�scCsFt�}|sdSt|�}t||||jd�|j�dS(Niii (R^tSaveWithProgressR4twriteR&(RRRR'R_((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_binary�s	cCst|||�dS(N(Rk(RRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowse_soundsR\cBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(R'(tselfR'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt__init__scCs|jj|d�dS(Ns
(R'Rj(RmR)((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR]scCs%|jj�}|r!dG|GHndS(NsExit status:(R'R&(RmRg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR&s(t__name__t
__module__RnR]R&(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR\s		RicBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(R'(RmR'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRnscCs1tjjd�tjj�|jj|�dS(Nt#(R:tstdoutRjtflushR'(RmR1((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRjs
cCs&H|jj�}|r"dG|GHndS(NsExit status:(R'R&(RmRg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR& s(RoRpRnRjR&(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRis		cCs2ytd�}Wntk
r%HdSXtj|�}|s?dS|ddkr�tj|d�}ytj|d�}Wn'tk
r�}t|�GdG|GHdSXdGt|�GdGH|S|dd	kr�tj	j
|�}nyt|d�}Wn'tk
r}t|�GdG|GHdSXd
Gt|�GdGH|S(Ns<Save as file [CR == don't save; |pipeline or ~user/... OK]: it|iRXRAsPiping throughs...t~s	Saving to(RHRIRYRRbRZR[RLRCtpatht
expandusertopen(tsavefiletcmdR`R?R'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR^'s6

cCs
tjdr"dGHtjd�n�tjdrWttjdtjdtjd�n�tjdr�y-tjtjd�}d}tjd}Wn4tjk
r�tjd}tjd}d}nXt|||�n+tjdr�tdtjd�nt�dS(Nis(usage: gopher [ [selector] host [port] ]iiiR(R:targvR;R@RRRJ(RRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyttestEs$

(




((()RR:RZRR5R6R
t
T_TEXTFILEtT_MENUtT_CSOtT_ERRORtT_BINHEXtT_DOSt
T_UUENCODEtT_SEARCHtT_TELNETtT_BINARYtT_REDUNDANTtT_SOUNDRFRR"RRR,R.R-R2R4R@R8RaRdRhRkRlRKR\RiR^R|(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt<module>s\	
								.			
					ftp.pyc000064400000005612150374041210006053 0ustar00�
��^c@s�ddlZddlZddlZddlTdZdZedZedZd�Zd�Zd	a	d
�Z
d�Zd�Zd
�Z
d�Ze�dS(i����N(t*iiiiP�cCstjd}t|�dS(Ni(tsystargvtcontrol(thostname((s(/usr/lib64/python2.7/Demo/sockets/ftp.pytmain's
cCs�ttt�}|j|tf�|jd�}d}x�t|�}|dkrVPn|dkr�t|�t|�}d}n|s�t	||�}nt
�}|s�Pn|j|d�q:WdS(Ntrt221tEOFt150s
(RR(tsockettAF_INETtSOCK_STREAMtconnecttFTP_PORTtmakefiletNonetgetreplytgetdatatnewdataportt
getcommandtsend(RtstfRtcodetcmd((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR.s$
		icCsdtt}tddattt�}|jtt��|f�|jd�t	|||�|S(Nii(
tnextportt
FTP_DATA_PORTR
RRtbindt
gethostbynametgethostnametlistentsendportcmd(RRtportR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyRMs

c
Cs�t�}t|�}tj|d�}t|d�t|d�g}||}dtj|d�}|j|d�t|�}	dS(Nt.isPORT t,s
(RRtstringtsplitfieldstreprt
joinfieldsRR(
RRR!RthostaddrthbytestpbytestbytesRR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR Zs	 
cCs�|j�}|sdS|G|d }|dd!dkr�xH|j�}|sPPn|G|d |kr:|dd!dkr:Pq:q:Wn|S(NRiit-(treadline(RtlineR((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyRks
#cCsUdGH|j�\}}dGHx-|jt�}|s8Pntjj|�qWdGHdS(Ns(accepting data connection)s(data connection accepted)s(end of data connection)(taccepttrecvtBUFSIZERtstdouttwrite(Rtconnthosttdata((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR{scCs:y!xtd�}|r|SqWWntk
r5dSXdS(Nsftp.py> t(t	raw_inputtEOFError(R.((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyR�s
(RtposixR$R
R1RRRRRRR RRR(((s(/usr/lib64/python2.7/Demo/sockets/ftp.pyt<module>s$


			
				rpython.pyc000064400000001726150374041210006767 0ustar00�
Afc@sBddlZddlZddlTdZdZd�Ze�dS(i����N(t*iicCs	ttj�dkr*dGHtjd�ntjd}t}tj|d�}|dkrtj||d�}|| }ntjtjd�}t	t
t�}|j||f�|j
|�|jd�d}x'|jt�}|s�Pn||}q�W|GdS(Nisusage: rpython host commandiit:it(tlentsystargvtexittPORTtstringtfindtatoitjointsockettAF_INETtSOCK_STREAMtconnecttsendtshutdowntrecvtBUFSIZE(thosttporttitcommandtstreplytdata((s,/usr/lib64/python2.7/Demo/sockets/rpython.pytmain
s*



(RRRRRR(((s,/usr/lib64/python2.7/Demo/sockets/rpython.pyt<module>s
	udpecho.pyc000064400000003753150374041210006715 0ustar00�
Afc@sQddlZddlTd
ZdZd�Zd�Zd�Zd	�Ze�dS(i����N(t*iP�iicCsdttj�dkrt�ntjddkr<t�n$tjddkrYt�nt�dS(Niis-ss-c(tlentsystargvtusagetservertclient(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pytmains


cCs'tjt_dGHdGHtjd�dS(Ns,Usage: udpecho -s [port]            (server)s,or:    udpecho -c host [port] <file (client)i(Rtstderrtstdouttexit(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyRscCs�ttj�dkr+ttjd�}nt}ttt�}|jd|f�dGHx8|j	t
�\}}d||fGH|j||�q[WdS(Nitsudp echo server readysserver received %r from %r(RRRtevalt	ECHO_PORTtsockettAF_INETt
SOCK_DGRAMtbindtrecvfromtBUFSIZEtsendto(tporttstdatataddr((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyRscCs�ttj�dkrt�ntjd}ttj�dkrWttjd�}nt}||f}ttt�}|j	d�dGHxQtj
j�}|s�Pn|j||�|j
t�\}}d||fGHq�WdS(NiiRis$udp echo client ready, reading stdinsclient received %r from %r(Ri(RRRRRR
RRRRtstdintreadlineRRR(thostRRRtlineRtfromaddr((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyR+s"


iW�(RRR
RRRRR(((s,/usr/lib64/python2.7/Demo/sockets/udpecho.pyt<module>s
	
		
	unixclient.pyc000064400000000650150374041210007441 0ustar00�
��^c@seddlTdZeee�Zeje�ejd�ejd�Zej	�dGe
e�GHdS(i����(t*sunix-socketsHello, worlditReceivedN(tsockettFILEtAF_UNIXtSOCK_STREAMtstconnecttsendtrecvtdatatclosetrepr(((s//usr/lib64/python2.7/Demo/sockets/unixclient.pyt<module>s



unixserver.pyc000064400000001121150374041210007463 0ustar00�
��^c@s�ddlZddlTdZeee�Zeje�dej�dGHejd�ej	�\Z
Zx0er�e
j
d�Zes�Pne
je�qmWe
j�eje�dS(i����N(t*sunix-socketsSock name is: [t]ii(tostsockettFILEtAF_UNIXtSOCK_STREAMtstbindtgetsocknametlistentaccepttconntaddrtTruetrecvtdatatsendtclosetunlink(((s//usr/lib64/python2.7/Demo/sockets/unixserver.pyt<module>s


	
throughput.pyo000064400000004651150374041210007511 0ustar00�
Afc@s]ddlZddlZddlTd
ZdZd�Zd�Zd�Zd	�Ze�dS(i����N(t*iP�i*icCsdttj�dkrt�ntjddkr<t�n$tjddkrYt�nt�dS(Niis-ss-c(tlentsystargvtusagetservertclient(((s//usr/lib64/python2.7/Demo/sockets/throughput.pytmains


cCs'tjt_dGHdGHtjd�dS(Ns*Usage:    (on host_A) throughput -s [port]s7and then: (on host_B) throughput -c count host_A [port]i(Rtstderrtstdouttexit(((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR"scCs�ttj�dkr+ttjd�}nt}ttt�}|jd|f�|j	d�dGHxg|j
�\}\}}x |jt�}|s�Pn~q�W|j
d�|j�dG|GdG|GHqhWdS(NitisServer ready...sOK
s	Done withtport(RRRtevaltMY_PORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtsendtclose(Rtstconnthostt
remoteporttdata((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR)s"


cCs�ttj�dkrt�ntttjd��}tjd}ttj�dkrpttjd�}nt}dtdd}tj�}t	t
t�}tj�}|j||f�tj�}d}x'||kr�|d}|j
|�q�W|jd�tj�}	|jt�}
tj�}|
GHdG|G|G|G|	G|GHd	G||G||G|	|G||	GHd
G||GHdGtt|d||d�Gd
GHdS(Niiitxis
isRaw timers:s
Intervals:sTotal:sThroughput:g����MbP?sK/sec.(RRRRtintR
RRttimeRRRtconnectRtshutdownRtround(tcountRRttestdatatt1Rtt2tt3titt4Rtt5((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR>s6



%
!iz�(	RR RRRRRRR(((s//usr/lib64/python2.7/Demo/sockets/throughput.pyt<module>s
				finger.py000075500000002353150374041210006373 0ustar00#! /usr/bin/python2.7

# Python interface to the Internet finger daemon.
#
# Usage: finger [options] [user][@host] ...
#
# If no host is given, the finger daemon on the local host is contacted.
# Options are passed uninterpreted to the finger daemon!


import sys, string
from socket import *


# Hardcode the number of the finger port here.
# It's not likely to change soon...
#
FINGER_PORT = 79


# Function to do one remote finger invocation.
# Output goes directly to stdout (although this can be changed).
#
def finger(host, args):
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((host, FINGER_PORT))
    s.send(args + '\n')
    while 1:
        buf = s.recv(1024)
        if not buf: break
        sys.stdout.write(buf)
    sys.stdout.flush()


# Main function: argument parsing.
#
def main():
    options = ''
    i = 1
    while i < len(sys.argv) and sys.argv[i][:1] == '-':
        options = options + sys.argv[i] + ' '
        i = i+1
    args = sys.argv[i:]
    if not args:
        args = ['']
    for arg in args:
        if '@' in arg:
            at = string.index(arg, '@')
            host = arg[at+1:]
            arg = arg[:at]
        else:
            host = ''
        finger(host, options + arg)


# Call the main function.
#
main()
throughput.pyc000064400000004651150374041210007475 0ustar00�
Afc@s]ddlZddlZddlTd
ZdZd�Zd�Zd�Zd	�Ze�dS(i����N(t*iP�i*icCsdttj�dkrt�ntjddkr<t�n$tjddkrYt�nt�dS(Niis-ss-c(tlentsystargvtusagetservertclient(((s//usr/lib64/python2.7/Demo/sockets/throughput.pytmains


cCs'tjt_dGHdGHtjd�dS(Ns*Usage:    (on host_A) throughput -s [port]s7and then: (on host_B) throughput -c count host_A [port]i(Rtstderrtstdouttexit(((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR"scCs�ttj�dkr+ttjd�}nt}ttt�}|jd|f�|j	d�dGHxg|j
�\}\}}x |jt�}|s�Pn~q�W|j
d�|j�dG|GdG|GHqhWdS(NitisServer ready...sOK
s	Done withtport(RRRtevaltMY_PORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtsendtclose(Rtstconnthostt
remoteporttdata((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR)s"


cCs�ttj�dkrt�ntttjd��}tjd}ttj�dkrpttjd�}nt}dtdd}tj�}t	t
t�}tj�}|j||f�tj�}d}x'||kr�|d}|j
|�q�W|jd�tj�}	|jt�}
tj�}|
GHdG|G|G|G|	G|GHd	G||G||G|	|G||	GHd
G||GHdGtt|d||d�Gd
GHdS(Niiitxis
isRaw timers:s
Intervals:sTotal:sThroughput:g����MbP?sK/sec.(RRRRtintR
RRttimeRRRtconnectRtshutdownRtround(tcountRRttestdatatt1Rtt2tt3titt4Rtt5((s//usr/lib64/python2.7/Demo/sockets/throughput.pyR>s6



%
!iz�(	RR RRRRRRR(((s//usr/lib64/python2.7/Demo/sockets/throughput.pyt<module>s
				telnet.pyc000064400000004145150374041210006555 0ustar00�
Afc@s�ddlZddlZddlZddlTdZed�Zed�Zed�Zed�Z	ed�Z
d	�Zye�Wnek
r�nXdS(
i����N(t*ii�i�i�i�i�c
Cs!tjd}yt|�}Wn9tk
rXtjjtjdd�tjd�nXttj�dkr~tjd}nd}d|d ko�dknr�t|�}nHyt	|d�}Wn2tk
r�tjj|d�tjd�nXt
tt�}y|j
||f�Wn>tk
ra}tjjd	t|�d
�tjd�nXtj�}|dkr�x�tjj�}|j|�q}Wn}d}d}	xn|jt�}
|
s�tjjd
�tj|d�tjd�nd}x�|
D]�}|	r2t|�GH|j|	|�d}	q|r�d}|tkrW||}q�|ttfkr�|tkr|dGndGtt}	q�|ttfkr�|tkr�dGndGtt}	q�dGt|�GHq|tkr�d}dGq||}qWtjj|�tjj�q�WdS(Nis: bad host name
ittelnett0t9ttcps: bad tcp service name
sconnect failed: s
its(Closed by remote host)
i	s(DO)s(DONT)s(WILL)s(WONT)s	(command)s(IAC)(tsystargvt
gethostbynameterrortstderrtwritetexittlentevalt
getservbynametsockettAF_INETtSOCK_STREAMtconnecttreprtposixtforktstdintreadlinetsendtrecvtBUFSIZEtkilltordtIACtDOtDONTtWONTtWILLtstdouttflush(
thostthostaddrtservnametporttstmsgtpidtlinetiactopttdatat	cleandatatc((s+/usr/lib64/python2.7/Demo/sockets/telnet.pytmains|

 

	


(
RRttimeRRtchrRR RR!R"R2tKeyboardInterrupt(((s+/usr/lib64/python2.7/Demo/sockets/telnet.pyt<module>s$
	M
radio.py000064400000000437150374041210006215 0ustar00# Receive UDP packets transmitted by a broadcasting service

MYPORT = 50000

import sys
from socket import *

s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', MYPORT))

while 1:
    data, wherefrom = s.recvfrom(1500, 0)
    sys.stderr.write(repr(wherefrom) + '\n')
    sys.stdout.write(data)
finger.pyc000064400000002212150374041220006526 0ustar00�
Afc@sEddlZddlZddlTdZd�Zd�Ze�dS(i����N(t*iOcCstttt�}|j|tf�|j|d�x-|jd�}|sOPntjj	|�q6Wtjj
�dS(Ns
i(tsockettAF_INETtSOCK_STREAMtconnecttFINGER_PORTtsendtrecvtsyststdouttwritetflush(thosttargststbuf((s+/usr/lib64/python2.7/Demo/sockets/finger.pytfingerscCs�d}d}xO|ttj�kr]tj|d dkr]|tj|d}|d}qWtj|}|s}dg}nx^|D]V}d|kr�tj|d�}||d}|| }nd}t|||�q�WdS(Ntit-t t@(tlenRtargvtstringtindexR(toptionstiR
targtatR((s+/usr/lib64/python2.7/Demo/sockets/finger.pytmain%s/


(RRRRRR(((s+/usr/lib64/python2.7/Demo/sockets/finger.pyt<module>s

	
	udpecho.py000075500000002673150374041220006556 0ustar00#! /usr/bin/python2.7

# Client and server for udp (datagram) echo.
#
# Usage: udpecho -s [port]            (to start a server)
# or:    udpecho -c host [port] <file (client)

import sys
from socket import *

ECHO_PORT = 50000 + 7
BUFSIZE = 1024

def main():
    if len(sys.argv) < 2:
        usage()
    if sys.argv[1] == '-s':
        server()
    elif sys.argv[1] == '-c':
        client()
    else:
        usage()

def usage():
    sys.stdout = sys.stderr
    print 'Usage: udpecho -s [port]            (server)'
    print 'or:    udpecho -c host [port] <file (client)'
    sys.exit(2)

def server():
    if len(sys.argv) > 2:
        port = eval(sys.argv[2])
    else:
        port = ECHO_PORT
    s = socket(AF_INET, SOCK_DGRAM)
    s.bind(('', port))
    print 'udp echo server ready'
    while 1:
        data, addr = s.recvfrom(BUFSIZE)
        print 'server received %r from %r' % (data, addr)
        s.sendto(data, addr)

def client():
    if len(sys.argv) < 3:
        usage()
    host = sys.argv[2]
    if len(sys.argv) > 3:
        port = eval(sys.argv[3])
    else:
        port = ECHO_PORT
    addr = host, port
    s = socket(AF_INET, SOCK_DGRAM)
    s.bind(('', 0))
    print 'udp echo client ready, reading stdin'
    while 1:
        line = sys.stdin.readline()
        if not line:
            break
        s.sendto(line, addr)
        data, fromaddr = s.recvfrom(BUFSIZE)
        print 'client received %r from %r' % (data, fromaddr)

main()
mcast.py000075500000004246150374041220006234 0ustar00#! /usr/bin/python2.7
#
# Send/receive UDP multicast packets.
# Requires that your OS kernel supports IP multicast.
#
# Usage:
#   mcast -s (sender, IPv4)
#   mcast -s -6 (sender, IPv6)
#   mcast    (receivers, IPv4)
#   mcast  -6  (receivers, IPv6)

MYPORT = 8123
MYGROUP_4 = '225.0.0.250'
MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'
MYTTL = 1 # Increase to reach other networks

import time
import struct
import socket
import sys

def main():
    group = MYGROUP_6 if "-6" in sys.argv[1:] else MYGROUP_4

    if "-s" in sys.argv[1:]:
        sender(group)
    else:
        receiver(group)


def sender(group):
    addrinfo = socket.getaddrinfo(group, None)[0]

    s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)

    # Set Time-to-live (optional)
    ttl_bin = struct.pack('@i', MYTTL)
    if addrinfo[0] == socket.AF_INET: # IPv4
        s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin)
    else:
        s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin)

    while True:
        data = repr(time.time())
        s.sendto(data + '\0', (addrinfo[4][0], MYPORT))
        time.sleep(1)


def receiver(group):
    # Look up multicast group address in name server and find out IP version
    addrinfo = socket.getaddrinfo(group, None)[0]

    # Create a socket
    s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)

    # Allow multiple copies of this program on one machine
    # (not strictly needed)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # Bind it to the port
    s.bind(('', MYPORT))

    group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
    # Join group
    if addrinfo[0] == socket.AF_INET: # IPv4
        mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
        s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
    else:
        mreq = group_bin + struct.pack('@I', 0)
        s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)

    # Loop, printing any data we receive
    while True:
        data, sender = s.recvfrom(1500)
        while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
        print (str(sender) + '  ' + repr(data))


if __name__ == '__main__':
    main()
rpythond.pyc000064400000002467150374041220007137 0ustar00�
Afc@sWddlZddlTddlZddlZdZdZd�Zd�Ze�dS(i����N(t*iicCs�ttj�dkr1tttjd��}nt}ttt�}|j	d|f�|j
d�x||j�\}\}}dG|G|GHd}x'|jt
�}|s�Pn||}q�Wt|�}|j|�|j�qiWdS(Nitsconnected by(tlentsystargvtinttevaltPORTtsockettAF_INETtSOCK_STREAMtbindtlistentaccepttrecvtBUFSIZEtexecutetsendtclose(tporttstconnt
remotehostt
remoteporttrequesttdatatreply((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pytmains$


cBsvej}ej}ej�e_e_}z*y|iiUWnHejd�nXWd|e_|e_X|j�S(Nid(RtstdouttstderrtStringIOt	tracebackt	print_exctgetvalue(RRRtfakefile((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pyR%s			
(RRRRRRRR(((s-/usr/lib64/python2.7/Demo/sockets/rpythond.pyt<module>s
		gopher.pyo000064400000024123150374041220006561 0ustar00�
Afc@s�ddlZddlZddlZddlZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZidd6dd6dd6dd6dd	6dd
6dd6dd6dd
6dd6dd6dd6ZdZdZd�Zd �Zd!�Zd"�Zd#�Zd$�Zd%�Zd&�Zd'�Zd(�Zd)�Z d*�Z!d+�Z"d,�Z#i	ed6ed6e"d	6e"d
6ed6e d6e!d
6e"d6e#d6Z$d-d3d.��YZ%d/d4d0��YZ&d1�Z'd2�Z(e(�dS(5i����Ntsgopher.micro.umn.eduiFt0t1t2t3t4t5t6t7t8t9t+tss<TEXT>s<DIR>s<CSO>s<ERROR>s<BINHEX>s<DOS>s
<UUENCODE>s<SEARCH>s<TELNET>s<BINARY>s<REDUNDANT>s<SOUND>s
s	cCsh|st}n*t|�td�kr9tj|�}ntjtjtj�}|j||f�|S(NR(tDEF_PORTttypetstringtatoitsockettAF_INETtSOCK_STREAMtconnect(thosttportR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytopen_socket)s	cCs:t||�}|j|t�|jd�|jd�S(Nitr(RtsendtCRLFtshutdowntmakefile(tselectorRRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytsend_request3s
cCs)t|||�}g}x|j�}|s6dGHPn|dtkrS|d }n|dtkrp|d }n|dkr�Pn|s�dGHqn|d}tj|dt�}t|�dkr�d	|fGHqnt|�dkr�d
|dfGHn|jd|�|j|�qW|j	�|S(Ns(Unexpected EOF from server)i����i����t.s(Empty line from server)iiis(Bad line from server: %r)s(Extra info from server: %r)(
RtreadlineRRtsplitfieldstTABtlentinserttappendtclose(RRRtftlisttlinettypechartparts((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_menu:s6



cCs g}t||||j�|S(N(tget_alt_textfileR%(RRRR(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_textfileXscCs�t|||�}x�|j�}|s0dGHPn|dtkrM|d }n|dtkrj|d }n|dkrzPn|d dkr�|d}n||�qW|j�dS(Ns(Unexpected EOF from server)i����i����Ris..i(RR RR&(RRRtfuncR'R)((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR-^s 


cCs,t|||�}|j�}|j�|S(N(RtreadR&(RRRR'tdata((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
get_binaryqs
cCs@t|||�}x'|j|�}|s.Pn||�qWdS(N(RR0(RRRR/t	blocksizeR'R1((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytget_alt_binaryxscGs�t}t}t}t|�}|dkrA|drA|d}n|dkrd|drd|d}n|dkr�|dr�|d}n|dkr�td�nyt|||�WnAtjk
r�}dG|GHtj	d�nt
k
r�dGHnXdS(Niiiis
too many argss
Socket error:s

[Goodbye](tDEF_SELECTORtDEF_HOSTR
R#tRuntimeErrortbrowse_menuRterrortsystexittKeyboardInterrupt(targsRRRtntmsg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowser�s&


	
cCs�t|||�}x�dGHdGt|�GHdG|GdG|GHHx�tt|��D]u}||}|d|d}}tjt|d�d�dG|Gtj|�r�t|GHqNd	t|�d
GHqNWHx�ytd�}Wnt	k
r�HdSX|s�dSytj
|�}	Wntjk
r,dGHq�nXd|	koJt|�knsZd
GHq�nPq�W||	d}|d}|dd!\}
}}tj|�r�t|}
y|
|
||�Wq�t
tjfk
r�dGtjGdGtjGHq�XqdGHqWdS(Ns----- MENU -----s	Selector:sHost:s Port:iiit:s<TYPE=t>sChoice [CR == up a level]: s#Choice must be a number; try again:sChoice out of range; try again:iis***sUnsupported object type(R,treprtrangeR#Rtrjustttypenamethas_keyt	raw_inputtEOFErrorRt
atoi_errorttypebrowsertIOErrorRR9R:texc_typet	exc_value(RRRR(tititemR*tdescriptiontstrtchoicet
i_selectorti_hostti_porttbrowserfunc((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR8�sR
"
"

cCs�d}y8tjdd�}t|�}t||||j�Wntk
r\}dG|GHnX|rp|j�nt�}|s�dSt|�}yt||||j�dGHWntk
r�}dG|GHnX|j�dS(Ns
${PAGER-more}twsIOError:sDone.(	tNonetostpopent	SaveLinesR-twritelnRLR&t
open_savefile(RRRtxtpR?R'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowse_textfile�s&

		
cCs�x�dGHdGt|�GHdG|GdG|GHHytd�}Wntk
rNHPnXtj|�}|shPnd|krdGHqnt|t|||�qWdS(Ns----- SEARCH -----s	Selector:sHost:s Port:sQuery [CR == up a level]: s	s"Sorry, queries cannot contain tabs(RCRHRIRtstripR8R"(RRRtquery((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_search�s"
cCsp|rdGt|�GHnt|�td�kr?t|�}ntjd|d|�}|rldG|GHndS(Ns	Log in asRsset -x; exec telnet t sExit status:(RCRRZtsystem(RRRtsts((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_telnet�scCsFt�}|sdSt|�}t||||jd�|j�dS(Niii (R^tSaveWithProgressR4twriteR&(RRRR'R_((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt
browse_binary�s	cCst|||�dS(N(Rk(RRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pytbrowse_soundsR\cBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(R'(tselfR'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt__init__scCs|jj|d�dS(Ns
(R'Rj(RmR)((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR]scCs%|jj�}|r!dG|GHndS(NsExit status:(R'R&(RmRg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR&s(t__name__t
__module__RnR]R&(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR\s		RicBs#eZd�Zd�Zd�ZRS(cCs
||_dS(N(R'(RmR'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRnscCs1tjjd�tjj�|jj|�dS(Nt#(R:tstdoutRjtflushR'(RmR1((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRjs
cCs&H|jj�}|r"dG|GHndS(NsExit status:(R'R&(RmRg((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR& s(RoRpRnRjR&(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyRis		cCs2ytd�}Wntk
r%HdSXtj|�}|s?dS|ddkr�tj|d�}ytj|d�}Wn'tk
r�}t|�GdG|GHdSXdGt|�GdGH|S|dd	kr�tj	j
|�}nyt|d�}Wn'tk
r}t|�GdG|GHdSXd
Gt|�GdGH|S(Ns<Save as file [CR == don't save; |pipeline or ~user/... OK]: it|iRXRAsPiping throughs...t~s	Saving to(RHRIRYRRbRZR[RLRCtpatht
expandusertopen(tsavefiletcmdR`R?R'((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyR^'s6

cCs
tjdr"dGHtjd�n�tjdrWttjdtjdtjd�n�tjdr�y-tjtjd�}d}tjd}Wn4tjk
r�tjd}tjd}d}nXt|||�n+tjdr�tdtjd�nt�dS(Nis(usage: gopher [ [selector] host [port] ]iiiR(R:targvR;R@RRRJ(RRR((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyttestEs$

(




((()RR:RZRR5R6R
t
T_TEXTFILEtT_MENUtT_CSOtT_ERRORtT_BINHEXtT_DOSt
T_UUENCODEtT_SEARCHtT_TELNETtT_BINARYtT_REDUNDANTtT_SOUNDRFRR"RRR,R.R-R2R4R@R8RaRdRhRkRlRKR\RiR^R|(((s+/usr/lib64/python2.7/Demo/sockets/gopher.pyt<module>s\	
								.