#!/usr/bin/python

import socket, sys, os

def recvlen(conn, length):
    received=0
    data=''
    while  received < length:
        chunk = conn.recv(length-received)
        if chunk == '': raise RuntimeError,  "socket connection broken"
        data += chunk
        received += len(chunk)
    return data

def recvlenf(conn, length, f):
    f.write(recvlen(conn,length))

def recvline(conn):
    r=""
    while 1:
        s=conn.recv(1)
        if s == "\n":
            break
        r += s
    return r


picfn = sys.argv[1]

# CREATE SOCKETS TO TALK TO PHONE

HOST = ''        # Symbolic name meaning the local host
PORT = 50007     # Arbitrary non-privileged port

n80s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
n80s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
n80s.bind((HOST, PORT))
n80s.listen(1)
n80conn, addr = n80s.accept()

print 'Connected by', addr

# AND GO

while True:
    
    # READ PICTURE FROM PHONE TO DISK

    print "waiting for length"
    length = int(recvline(n80conn))
    print "got", length
    
    picf = file(picfn, "w")
    print "waiting for picture"
    recvlenf(n80conn, length, picf)
    picf.close()
    print "gotit"

n80conn.close()
