Changeset 301 for trunk

Show
Ignore:
Timestamp:
05/07/09 19:38:01 (3 years ago)
Author:
ocjhb
Message:

first bluetooth transfer working, only on mobile phones so far

Location:
trunk/sandbox/jhb
Files:
1 removed
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/mobile/ocwallet.py

    r300 r301  
    200200        methodlist = [u'internet',u'bluetooth'] 
    201201        method = appuifw.popup_menu(methodlist) 
     202 
     203        cdd,alreadythere = self.getCurrentCurrency() 
     204        transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     205 
    202206        if method ==1: 
    203             appuifw.note(u'bt not implemented yet','conf') 
    204         else: 
    205             cdd,alreadythere = self.getCurrentCurrency() 
    206             transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     207            self.receiveCoinsBT(transport) 
     208        else: 
    207209            self.receiveCoinsHTTP(transport) 
    208210         
    209211        self.makeWalletMenu() 
    210212        self.displayWalletMenu() 
    211  
     213     
     214 
     215     
     216     
    212217    def receiveCoinsBT(self,transport): 
    213         import btsocket 
    214         server_socket = btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM) 
    215         port = btsocket.bt_rfcomm_get_available_server_channel(server_socket) 
    216         server_socket.bind(("", port)) 
    217         server_socket.listen(1) 
    218         btsocket.bt_advertise_service( u"opencoin", server_socket, True, btsocket.RFCOMM) 
    219         btsocket.set_security(server_socket, btsocket.AUTH) 
    220         (sock,peer_addr) = server_socket.accept() 
    221         def receive(sock): 
    222             received = '' 
    223             try: 
    224                 while True: 
    225                     data = sock.recv(1024) 
    226                     if len(data) == 0: break 
    227                     received += data     
    228             except IOError: 
    229                 pass 
    230             return transports.createMessage(received) 
    231  
     218        if sys.platform == 'symbian_s60': 
     219            import btsocket 
     220            server_socket = btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM) 
     221            port = btsocket.bt_rfcomm_get_available_server_channel(server_socket) 
     222            server_socket.bind(("", port)) 
     223            server_socket.listen(1) 
     224            btsocket.bt_advertise_service( u"opencoin", server_socket, True, btsocket.RFCOMM) 
     225            btsocket.set_security(server_socket, btsocket.AUTH) 
     226            appuifw.note(u'waiting for connection') 
     227            (sock,peer_addr) = server_socket.accept() 
     228 
     229        else: 
     230            import bluetooth as bt 
     231            server_sock=bt.BluetoothSocket(bt.RFCOMM) 
     232            server_sock.bind(("",bt.PORT_ANY)) 
     233            server_sock.listen(1) 
     234            port = server_sock.getsockname()[1] 
     235 
     236            uuid = "9e72d9d8-e06d-41cb-bbd4-89cd052cccb8" 
     237             
     238            bt.advertise_service( server_sock, u"opencoin",) 
     239                                
     240            sock, client_info = server_sock.accept() 
     241 
     242         
     243        bt = transports.BTTransport(sock) 
    232244        self.wallet.getApproval = self.getApproval  
    233         reply(self.wallet.listenSum(receive(sock)) 
    234         reply(self.wallet.listenSum(receive(sock)) 
    235          
    236  
    237  
     245        bt.send(self.wallet.listenSum(bt.receive())) 
     246        bt.send(self.wallet.listenSpend(bt.receive(),transport)) 
     247         
    238248 
    239249    def receiveCoinsHTTP(self,transport): 
     
    273283        self.stopInternet() 
    274284 
     285 
     286    def getBTTransport(self): 
     287         
     288        import btsocket 
     289        sock=btsocket.socket(btsocket.AF_BT,btsocket.SOCK_STREAM) 
     290        addr,services=btsocket.bt_discover() 
     291        if len(services)>0: 
     292            choices=services.keys() 
     293            choices.sort() 
     294            choice=appuifw.popup_menu([unicode(services[x])+": "+x for x in choices],u'Choose port:') 
     295            port=services[choices[choice]] 
     296        else: 
     297            port=services[services.keys()[0]] 
     298        address=(addr,port) 
     299        sock.connect(address) 
     300        return transports.BTTransport(sock) 
     301 
    275302    def spendCoins(self): 
    276303 
     
    282309        if not target: 
    283310            return 
    284         cdd,alreadythere = self.getCurrentCurrency() 
    285         url = appuifw.query(u'url','text',u'http://192.168.2.105:9091') 
    286         transport = transports.HTTPTransport(url) 
     311             
     312        methodlist = [u'internet',u'bluetooth'] 
     313        method = appuifw.popup_menu(methodlist) 
     314 
     315 
     316        cdd,alreadythere = self.getCurrentCurrency() 
     317        if method == 0: 
     318            url = appuifw.query(u'url','text',u'http://192.168.2.105:9091') 
     319            transport = self.getHTTPTransport(url) 
     320        else: 
     321            transport = self.getBTTransport()  
    287322 
    288323        self.wallet.spendCoins(transport,cdd.currencyId,amount,target) 
  • trunk/sandbox/jhb/oc2/transports.py

    r270 r301  
    1919      
    2020    def __call__(self,message): 
    21         import urllib2, urllib 
    22         response = urllib2.urlopen(self.url,message.toString(True)) 
     21        import urllib 
     22        response = urllib.urlopen(self.url,message.toString(True)) 
    2323        return createMessage(response.read()) 
     24 
     25import sys 
     26 
     27class BTTransport(object): 
     28 
     29    def __init__(self,socket): 
     30        self.stop = '\r\r+++STOP+++\r\r' 
     31        self.lenstop = len(self.stop) 
     32        self.socket = socket 
    2433         
     34    def __call__(self,message): 
     35        self.send(message) 
     36        return self.receive() 
     37    
     38    def send(self,message): 
     39        self.socket.send(message.toString(True)+self.stop) 
     40 
     41    def receive(self): 
     42        line='' 
     43        while not line.endswith(self.stop): 
     44            ch=self.socket.recv(1) 
     45            line += ch 
     46 
     47        received = line[:-self.lenstop] 
     48        return createMessage(received) 
     49 
     50     
     51 
    2552class YieldTransport(object): 
    2653