Show
Ignore:
Timestamp:
07/28/09 23:23:14 (15 years ago)
Author:
trnewman
Message:

Added DSA CBR reference implementation.
Added simple python example application for DSA CBR.
Added GNUradio python application that uses CROSS and the DSA CBR.

Fixed several bugs in the socket interface.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/shell/CognitiveRadioShell.cpp

    r316 r389  
    642642 
    643643 
    644 void 
     644int 
    645645CognitiveRadioShell::HandleMessage(int32_t socketFD) 
    646646{ 
    647647    char buffer[256]; 
    648     //printf("here\n"); 
    649     ReadMessage(socketFD, buffer); 
     648    int ret = 0; 
     649     
     650    ret = ReadMessage(socketFD, buffer); 
     651    if(ret == -1) { 
     652        return ret; 
     653    } 
    650654 
    651655    // TODO trying to read this code lock makes my eyes bleed 
     
    685689        //GetOptimalParametersService(socketFD);   
    686690    } 
     691 
     692    return ret; 
    687693} 
    688694 
     
    699705    int32_t desc_ready = 1; 
    700706    int32_t timeout = 10; 
     707    int32_t ret = 0;; 
    701708    fd_set sockSet; 
     709    
     710 
    702711 
    703712    int32_t *servSock = new int32_t[3]; 
     
    726735        ERROR(1,"Error initializing command port\n"); 
    727736 
     737    FD_ZERO(&sockSet); 
     738     
    728739    while (running) { 
    729740        /* Zero socket descriptor vector and set for server sockets */ 
    730741        /* This must be reset every time select() is called */ 
    731         //FD_ZERO(&sockSet); 
    732742        FD_SET(servSock[primary], &sockSet); 
    733743        FD_SET(servSock[policy], &sockSet); 
     
    740750 
    741751        /* Suspend program until descriptor is ready or timeout */ 
    742         //printf("Waiting for signal...\n"); 
    743         rc = select(maxDescriptor + 1, &sockSet, NULL, NULL, NULL);  
     752        rc = select(maxDescriptor + 1, &sockSet, NULL, NULL, &selTimeout);  
    744753        if(rc == 0) 
    745754            LOG("No echo requests for %i secs...Server still alive\n", timeout); 
     
    754763                        do { 
    755764                            new_sd = AcceptTCPConnection(port); 
    756                             if(new_sd < 0)  
     765                            if(new_sd < 0) { 
    757766                                break; 
     767                            } 
    758768                            
    759769                            if(port == servSock[primary]) 
     
    764774                                policySocketFD = new_sd; 
    765775 
    766                             HandleMessage(new_sd); 
    767                             FD_SET(new_sd,&sockSet); 
     776                            ret = HandleMessage(new_sd); 
     777 
     778                            if(ret == -1) { 
     779                                FD_CLR(new_sd,&sockSet); 
     780                                close(new_sd); 
     781                            } 
     782 
     783                            FD_SET(new_sd,&sockSet); 
    768784                            if(new_sd > maxDescriptor)  
    769785                                maxDescriptor = new_sd; 
    770                             //LOG("New incoming connection - %i\n\n",new_sd); 
    771786                        } while(new_sd != -1); 
    772                     }  
     787                    }  
    773788                    else { 
    774                         //LOG("Request on already open descriptor.\n\n"); 
    775                         HandleMessage(port); 
     789                        ret = HandleMessage(port); 
     790                        if(ret == -1) { 
     791                            FD_CLR(port,&sockSet); 
     792                            close(port); 
     793                        } 
    776794                    } 
    777795                } 
     
    780798    } 
    781799 
    782  
     800    LOG("Closing it all.\n\n"); 
    783801    /* Close sockets */ 
    784802    close(servSock[primary]);